Android中ActivityIntent显式跳转失败的原因总结

情景再现

app中有两个页面分别为A和B,通过使用Intent实现A页面跳转到B页面,但最后没有实现跳转,打断点后发现运行了对应的代码。

可能原因

一、任务栈被系统回收了

这个问题标题可能有问题,但大概意思就是需要跳转的目标所在的任务栈被系统回收了,我们可以通过设置setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 来实现跳转。
原理:

设置此状态,首先会查找是否存在和被启动的Activity具有相同的亲和性的任务栈(即taskAffinity,注意同一个应用程序中的activity的亲和性一样),如果有,则直接把这个栈整体移动到前台,并保持栈中的状态不变,即栈中的activity顺序不变,如果没有,则新建一个栈来存放被启动的activity
引用自文章:https://blog.csdn.net/u010389391/article/details/78558475

二、启动模式冲突

这个问题恰恰是由于设置了上一点中的Intent.FLAG_ACTIVITY_NEW_TASK导致的。
原理:
Intent.FLAG_ACTIVITY_NEW_TASK会将要跳转的目标activity的启动模式设置为singleTask,如果目标activity的启动模式为singleTop就会出现启动模式上的冲突。

三、Parcelable序列化错误

如果你在intent对象中传递了对象,那么有可能是这个对象的序列化产生了冲突,intent取消了跳转。具体情况为:数据bean中有内部类,只对ben进行了Parcelable序列化,而没有对其内部的内部类进行Parcelable序列化。
我们需要检查对应的数据bean序列化是否有问题。
另外:如果序列化出错,有可能不会出现跳转失败的问题,但是在跳转后获取数据会拿不到正确的数据。

结语

页面跳转失败应该还会有很多其他情况,我这里只是列举了我所知到的三种情况,另外这三种情况的原理我描述的可能并不正确,所以如果有什么错误的地方希望能得到指正,避免误导其他人,拜谢!也希望能知道更多其他intent跳转失败的类型及原因,如果有大佬知道还望不吝赐教,后续如果再了解到其他类型会持续更新进来,再次拜谢!!

猜你喜欢

转载自blog.csdn.net/qq_39734865/article/details/102266737
今日推荐