【BUG系列】getIntent()无法获取到值,Activity 是singTask 模式
我们经常有通过 Scheme 打开 App 的情况,并且大多数时候会通过 Scheme 携带一些参数回来。
一般情况下,可能都是正常的。但是!!!
当启动模式是 singTask 时,Activity 的生命周期就有了两种情况,可能会导致我们获取不到携带回来的参数。
第一种:Activity 没有创建过
那就新创建,那就是正常的流程
onCreate()
onStart()
onResume()
这个时候,我们获取 getIntent() 是没有问题的。
第二种:Activity 已经存在了
它在后台。这时候是 onPause() 或 onStop() 状态,在看启动流程
onNewIntent()
onRestart()
onStart()
onResume()
首先注意,onCreate() 方法不会再走了,如果是在 onCreate() 中获取 getIntent() 肯定是获取不到的。
然后来看这个 onNewIntent() 方法:
当 launchMode 为 singleTask 的时候,通过 Intent 启到一个 Activity ,如果系统已经存在一个实例,系统就会将请求发送到这个实例上。但这个时候,系统就不会再调用通常情况下我们处理请求数据的 onCreate 方法,而是调用 onNewIntent 方法。
所以,我们再要获取到 intent ,就要重写 onNewIntent 方法,如下:
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// 从这里传回来的 intent 就是新的 intent
// 将 onNewIntent 接收的 initnt 设置给 Activity
setIntent(intent);
}
结论
想要在 singleTask 模式下获取 getIntent() 有两种方式:
1. 重写 onNewIntent() ,在 onStart() 中获取 getIntent();
2. 在 onCreate() 获取 getIntent();再重写 onNewIntent() ,在 onNewIntent() 中把 onCreate() 中的逻辑再写一遍。
两者选其一即可。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 时光·李记
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果