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跳转失败的类型及原因,如果有大佬知道还望不吝赐教,后续如果再了解到其他类型会持续更新进来,再次拜谢!!

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Android ,要使用显式意图(Explicit Intent)进行 Activity 跳转,需要以下步骤: 1. 创建一个 Intent 对象:`Intent intent = new Intent(this, TargetActivity.class);` 其,第一个参数指当前 Activity 的上下文,第二个参数指目标 Activity 的类名。 2. 可以通过 `putExtra()` 方法向目标 Activity 传递数据: ```java intent.putExtra("key", value); ``` 其,`key` 是传递数据的键名,`value` 是传递数据的值。 3. 调用 `startActivity()` 方法启动目标 Activity: ```java startActivity(intent); ``` 完整的示例代码如下: ```java // 当前 Activity public class MainActivity extends AppCompatActivity { // 点击按钮跳转到目标 Activity public void gotoTargetActivity(View view) { // 创建 Intent 对象 Intent intent = new Intent(this, TargetActivity.class); // 传递数据 String data = "Hello, World!"; intent.putExtra("data", data); // 启动目标 Activity startActivity(intent); } } // 目标 Activity public class TargetActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); // 接收传递的数据 String data = getIntent().getStringExtra("data"); Log.d("TargetActivity", data); } } ``` 在上面的示例,点击按钮后会跳转到目标 Activity,并且会在控制台输出传递的数据。 ### 回答2: 在Android开发Activity之间的跳转可以使用显式意图实现。 显式意图是指明目标Activity跳转方式。首先需要创建一个Intent对象,指定当前Activity和目标Activity的类名。然后通过调用startActivity()方法来启动目标Activity。 具体步骤如下: 1. 创建Intent对象: Intent intent = new Intent(CurrentActivity.this, TargetActivity.class); 2. 设置传递数据(可选): 如果需要传递数据到目标Activity,可以使用intent.putExtra()方法将数据以键值对的形式存储在Intent对象。例如: intent.putExtra("key", value); 3. 启动目标Activity: 调用startActivity()方法,将Intent对象作为参数传递进去,即可启动目标Activity: startActivity(intent); 以上就是使用显式意图实现Activity跳转的基本步骤了。 需要注意的是,跳转前需在AndroidManifest.xml文件注册目标Activity,否则将无法正常跳转。在<application>标签内,使用<activity>标签进行注册,指定目标Activity的类名。 例如: <activity android:name=".TargetActivity" android:label="Target Activity" /> 通过显式意图,我们可以方便地在不同的Activity之间进行跳转,并且可以传递数据,实现更加丰富和灵活的应用程序交互体验。当然,除了显式意图,还有隐式意图等其他方式可以实现Activity之间的跳转

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值