您的位置:首页 > 其它

Intent(信使)显式与隐式调用

2017-03-17 13:55 232 查看

Intent(信使)显式与隐式调用

程序的3个核心组件——Activity、Service、BroadcastReceiver——是通过Intent传递消息的,本篇简单列举一下Intent在Activity间的显式和隐式的使用方法。

显式Intent的使用

显式,顾名思义,就是明显地写出将要跳转的代码文件的名字。

标准版

Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
startActivity(intent);


千万别忘了在AndroidManifest文件中注册Activity

<activity android:name=".SecondActivity">
</activity>


两行代码

Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);


丧心病狂型

startActivity(new Intent(this,SecondActivity.class));


这里建议使用标准版,清晰明了,便于后续的二次开发。

隐式Intent的使用

相对于显式Intent,隐式Intent比较复杂。涉及到过滤器的概念:

intent过滤器是IntentFilter类的实例。然而,Android系统在启动组件前必须知道组件的能力,intent过滤器是在manifest文件(AndroidManifest.xml)里作为元素建立而不是在java代码里。(有一个特例是:广播接收器的过滤器,它是通过Context.registerReceiver()函数动态的注册;它被作为IntentFilter对象创建。)

一个过滤器有动作域、数据域、intent对象类别域。一个显式的intent测试这三个域。并派送给拥有过滤器的组件,必须通过三个测试。如果有一个测试失败,Android系统都不会分派——至少不是过滤器的基础。然而,如果组件有多个intent过滤器,不分派给一个组件也会分派给另一个组件。

具体的信息可以参考官方文档,这里不加赘述:

Google官方文档-Intent过滤器

下面我们来看看代码实现:

java文件中

Intent intent = new Intent();
intent.setAction("android.intent.action.toSecond");
startActivity(intent);


AndroidManifest文件中

<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.toSecond" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>


这里需要注意的是,只有和中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent。

完。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  intent讲解