显式 Intent :

在知道目标组件名称的前提下,去调用Intent.setComponent()、Intent.setClassName()或Intent.setClass()方法或者在new Intent(A.this,B.class)指明需要转向到的Activity,

显式意图明确指定了要激活的组件是哪个组件,一般是在应用程序内部使用。

Intent intent = new Intent();
intent.setClassName("com.android.deskclock","com.android.deskclock.DeskClock");
startActivity(intent);

------------------------------------------------------------------------------

隐式Intent:通过在清单文件中配置IntentFilter来实现的,它一般用在没有明确指出目标组件名称的前提下,当一个应用要激活另一个应用中的Activity时(看不到源代码),只能使用隐式意图,根据Activity配置的意图过滤器建一个意图,让意图中的各项参数的值都跟过滤器匹配,这样就可以激活其他应用中的Activity。Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。一般是用于在不同应用程序之间,如果想隐式intent不可以被跨应用启动只需要在AndroidManifest.xml对应的activity中配置android:exported="false"即可。

//分享功能就是通过隐式Intent完成的。
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT,"This is my text to send.");
sendIntent.setType("text/plain");
startActivity(sendIntent);
--------------------------------------------------------------------------
总结:

显示intent效率高,系统直接精确定位要启用的组件,但耦合度也高,如果通过这种方式调用一些系统组件的话,容易因为版本更新,类名、包名、包结构变化等原因导致程序崩溃。

隐式意图能够降低程序的耦合度,但由于每次意图执行的时候,系统都会搜索所有可用的 intentfilter,来查看是否有匹配的内容,所以效率更低。
---------------------------------------------------------------------------

注意:

使用隐式intent启动activity的时候如果有两个action配置是一样的,那么启动的时候系统就会弹出对话框让你选择去启动哪一个,那么怎么过滤掉自己不想启动的哪一个呢,可以自定义URL使用Scheme方式唤起Activity或App,这样就可以对同一个action进行区分了!

<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="android.intent.category.BROWSABLE"></category>
<data
android:scheme="app"
android:host="test">
</data>
</intent-filter>
//隐式Intent写法为:
Uri uri=Uri.parse("app://test");
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);

最新文章

  1. 【转】struts1.2的action参数配置
  2. window.parent与window.openner 之前的总结
  3. HDU 4628 Pieces(DP + 状态压缩)
  4. 为 Joomla 而生的 Kunena 论坛安装手册
  5. Swift中KIF测试的特点-b
  6. QT:使用“状态模式”绘制界面
  7. JavaEE Tutorials (18) - Java EE平台安全介绍
  8. Apache与Nginx优缺点比较
  9. 【HELLO WAKA】WAKA iOS客户端 之一 APP分析篇
  10. LightOJ 1370 Bi-shoe and Phi-shoe 数论
  11. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 B - Ignatius and the Princess IV
  12. ansible-playbook相关
  13. PHP性能分析——xhprof(window 安装xhporf)
  14. 第一章 CSS基础
  15. SQLserver如何创建一个表
  16. JS 显示隐藏DIV
  17. ftp传输文件到指定服务器
  18. 【原创】Team Foundation Server 域环境迁移
  19. python里的默认参数
  20. ubuntu boot空间不足的解决方法

热门文章

  1. 学习MeteoInfo二次开发教程(十)
  2. 如何让SQLServer的 itemNum 字段 按照数字大小顺序排序
  3. vue设置路由跳转参数,以及接收参数
  4. 自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程
  5. 设置mysql远程连接
  6. 前端生成excel
  7. Jquery如何序列化form表单数据为JSON对象
  8. Spring中@Value注解使用——一种新的直接读取配置文件的方式
  9. Mac谷歌浏览器跨域
  10. 设计在canal中的运用,看到随手记下