Android 防止在后退按钮上销毁后恢复意图
Android prevent intent restoration after Destroy on back button
我 运行 遇到了一个令人不快的问题,我不知道如何正确解决。
场景:
MainActivity 有一个方法 handleIncomingIntent()
此方法解析传入意图(用于服务或广播接收器)中的 Extras,并根据意图数据打开子活动。
因此,当传入的 Intent 具有类型 A 的数据时,它将开始 Activity(ActivityA.class),如果类型为 B,则开始 Activity(ActivityB.class) 如果没有数据,它将留在 MainActivity
问题是当设备内存不足时,MainActivity 被破坏,而在 ActivityA 或 ActivityB 中。
因此,当使用 BackButton 时 - MainActivity 被恢复并且它的传入 Intent 被恢复到与处理它之前相同的状态,尽管我正在做 incomingIntent.removeExtras(KEY)我的 handleIncomingIntent() 方法结束。所以结果是 - 它再次启动 Child Activity,这是一个循环!
我意识到我可以将一些 isIntentConsumed 标志存储到 onDestroy() 内的内存中,然后读取它 restoreSavedState() 并使用它来解除意图,因为它已经被消耗了。
我只是觉得一定有比我刚才描述的 "bandaid" 更好的方法。
亲切的问候,
帕维尔
你说的
是什么意思
Problem is when device is low on memory, MainActivity is destroyed,
while in ActivityA or ActivityB.
it is not clear and also
Therefore when Back Button is used
我认为你是在谈论 Activity A 或 B 上的后退按钮按下事件,如果是这种情况,我建议你在移动到 A 后完成 MainActivity或 B activity 。然后在 A/B activity 上,你应该覆盖 onBackPressed() 方法,你应该再次启动主 activity 并完成 activity A/B.
这样做可以节省内存不足的设备。顺便说一句,你也在真实设备上试过吗?如果没有,请在真实设备上检查并告知我们。我希望它对你有用
如果停止的 Activity 由于系统限制而非正常条件(用户按回或 activity 自行完成)而被破坏,方法 onSaveInstanceState(Bundle savedInstanceState) 将被调用。当用户导航回这种 activity 时,onRestoreInstanceState(Bundle savedInstanceState) 将被调用,之前保存的包将作为参数传递给 onRestoreInstanceState () 和 onCreate().
所以你可以查看onCreate(Bundle savedInstanceState)的实际参数,如果savedInstanceState != null
你可以知道activity被重新创建了。希望有所帮助。
我 运行 遇到了一个令人不快的问题,我不知道如何正确解决。
场景:
MainActivity 有一个方法 handleIncomingIntent()
此方法解析传入意图(用于服务或广播接收器)中的 Extras,并根据意图数据打开子活动。 因此,当传入的 Intent 具有类型 A 的数据时,它将开始 Activity(ActivityA.class),如果类型为 B,则开始 Activity(ActivityB.class) 如果没有数据,它将留在 MainActivity
问题是当设备内存不足时,MainActivity 被破坏,而在 ActivityA 或 ActivityB 中。
因此,当使用 BackButton 时 - MainActivity 被恢复并且它的传入 Intent 被恢复到与处理它之前相同的状态,尽管我正在做 incomingIntent.removeExtras(KEY)我的 handleIncomingIntent() 方法结束。所以结果是 - 它再次启动 Child Activity,这是一个循环!
我意识到我可以将一些 isIntentConsumed 标志存储到 onDestroy() 内的内存中,然后读取它 restoreSavedState() 并使用它来解除意图,因为它已经被消耗了。
我只是觉得一定有比我刚才描述的 "bandaid" 更好的方法。
亲切的问候, 帕维尔
你说的
是什么意思Problem is when device is low on memory, MainActivity is destroyed, while in ActivityA or ActivityB. it is not clear and also
Therefore when Back Button is used
我认为你是在谈论 Activity A 或 B 上的后退按钮按下事件,如果是这种情况,我建议你在移动到 A 后完成 MainActivity或 B activity 。然后在 A/B activity 上,你应该覆盖 onBackPressed() 方法,你应该再次启动主 activity 并完成 activity A/B.
这样做可以节省内存不足的设备。顺便说一句,你也在真实设备上试过吗?如果没有,请在真实设备上检查并告知我们。我希望它对你有用
如果停止的 Activity 由于系统限制而非正常条件(用户按回或 activity 自行完成)而被破坏,方法 onSaveInstanceState(Bundle savedInstanceState) 将被调用。当用户导航回这种 activity 时,onRestoreInstanceState(Bundle savedInstanceState) 将被调用,之前保存的包将作为参数传递给 onRestoreInstanceState () 和 onCreate().
所以你可以查看onCreate(Bundle savedInstanceState)的实际参数,如果savedInstanceState != null
你可以知道activity被重新创建了。希望有所帮助。