我遇到了一个令人不快的问题,我不知道如何妥善解决。
场景:
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"我刚刚描述过。
亲切的问候, 帕维尔
答案 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
您可以知道重新创建了活动。希望有所帮助。