在按下后退按钮后,Android会阻止意图恢复

时间:2015-03-19 18:10:48

标签: java android android-intent android-activity destroy

我遇到了一个令人不快的问题,我不知道如何妥善解决。

场景:

MainActivity有一个方法handleIncomingIntent()

此方法解析传入意图中的Extras(用于服务或广播接收器),并根据意图数据打开子活动。 因此,当传入的Intent具有类型A的数据时,它将是startActivity(ActivityA.class),如果是类型B则是startActivity(ActivityB.class),如果没有数据它将保留在MainActivity中

问题是当设备内存不足时,MainActivity会被破坏,而在ActivityA或ActivityB中。

因此,当使用BackButton时 - MainActivity得到恢复,并且它的传入Intent恢复到与处理它之前相同的状态,尽管事实上我在最后做了incomingIntent.removeExtras(KEY)。我的handleIncomingIntent()方法。结果是 - 它再次开始了儿童活动,这是一个循环!

我意识到我可以将一些isIntentConsumed标志存储在onDestroy()内的内存中,然后读取它restoreSavedState()并使用它来解除意图,因为它已经被消耗了。

我觉得必须有一个更好的方式而不是" bandaid"我刚刚描述过。

亲切的问候, 帕维尔

2 个答案:

答案 0 :(得分:0)

是什么意思

  

问题是当设备内存不足时,MainActivity被破坏,   而在ActivityA或ActivityB中。   它不清楚,也

     

因此,当使用后退按钮时

我认为您正在谈论活动A或B上的后退按钮事件,如果是这种情况,我建议您在转移到A或B活动后完成MainActivity。然后在A / B活动中,你应该超越onBackPressed()方法,你应该再次启动主要活动并完成活动A / B.

执行此操作可以将设备从低内存中保存。 BTW你也试过它在真实设备上吗?如果没有,请在真实设备上查看并告知我们。我希望它对你有用

答案 1 :(得分:0)

如果停止的Activity由于系统限制而非正常条件(用户按下或活动完成本身)而被销毁,则将调用方法 onSaveInstanceState(Bundle savedInstanceState)。当用户导航回此类活动时,将调用 onRestoreInstanceState(Bundle savedInstanceState),并将之前保存的包作为参数传递给 onRestoreInstanceState()的onCreate()

因此,您可以检查 onCreate(Bundle savedInstanceState)的实际参数,如果savedInstanceState != null您可以知道重新创建了活动。希望有所帮助。