Activity 跳转详解
你好! 我是 Graydalf ,有可能也叫 Gdalf ~
今天被朋友问到如何设置一个广播来启动一个应用并显示数据,于是将自己了解到的记录下来,有什么较为 DEMO 的地方希望你能留言告诉我,谢谢。
- 本节说明
- Activity 跳转的方式
- 跳转传值问题(包括非 Activity 的跳转到 Activity)
- 跳转传递值时生命周期回调函数调用情况
1. 显示跳转
通过字节码方式进行跳转,需要获取到字节码,所以多用于工程内跳转。
逻辑步骤:
- 通过Activity的实现类对象调用
startActivity(Intent intent)
方法跳转 - 然后需要创建一个Intent对象
Intent i = new Intent(getApplicationContext(), MyActivity.class)
,参数1 可以使用通用的Context对象,参数2 则是需要跳转到的Activity字节码对象 - 可以在Intent对象中存放数据
i.putExtra(key, value)
- 然后再调转到的Activity中使用
getIntent().getStringExtra(key)
等方法来获取数据
2. 隐式跳转
通过意图拦截器
<intent-filter />
来实现跳转
逻辑步骤:
- 配置意图拦截器
<intent-filter>
<action android:name="android.intent.action.MyActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="call"/>
<data android:mimeType="data/url"/>
</intent-filter>
<!-- action android:name 配置用于启动此Activity的请求字串 -->
<!-- category android:name 只能使用系统定义好的类型,这里类型为默认 -->
<!-- data android:scheme 数据前缀,请求的URI必须以此前缀+`:`开头 -->
<!-- data android:mimeType 数据类型限制 -->
- 通过Activity的实现类对象调用
startActivity(Intent intent)
方法跳转 - 然后需要创建一个Intent对象
Intent i = new Intent()
- 设置请求字串
i.setAction("android.intent.action.MyActivity")
- 设置请求类型
i.addCategory("android.intent.category.DEFAULT")
- 设置Data和Type
i.setDataAndType(Uri.parse("src:"+"values"), "data/url")
,注意不能分别调用setData(uri)
和setType(str)
方法,方法内部互相置空,列出其中一个的源码解释:
public Intent setType(String type) {
mData = null;//这里置空了对方
mType = type;
return this;
}
- 然后再调转到的Activity中使用
getIntent().getStringExtra(key)
等方法来获取数据
非Activity跳转到Activity
我们用一个实例来讲解这种情况下遇到的问题
广播监视短信,启动Activity并且显示短信,流程图如下&