java - Android 阻止后退按钮销毁后 Intent 恢复

标签 java android android-intent android-activity destroy

我遇到了一个不愉快的问题,我不知道如何正确解决。

场景:

MainActivity有一个方法handleIncomingIntent()

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

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

因此,当使用 BackButton 时,MainActivity 会恢复,并且传入的 Intent 会恢复到处理之前的相同状态,尽管事实上我在 handleIncomingIntent() 方法的末尾执行了传入Intent.removeExtras(KEY) 操作。所以结果是 - 它再次启动子 Activity 并且这是一个循环!

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

我只是觉得一定有比我刚才描述的“创可贴”更好的方法。

亲切的问候, 帕维尔

最佳答案

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

所以你可以检查onCreate(Bundle savingInstanceState)的实际参数,如果savedInstanceState != null你就可以知道activity被重新创建了。希望有帮助。

关于java - Android 阻止后退按钮销毁后 Intent 恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29152031/

相关文章:

android - 使用 recreate() 时包括 Intent extra

android - Android 中的选项卡,如何创建内容

java - 如何格式化字符串输出,使列均匀居中?

java - 尝试从 SwingWorker done() 方法绘制 JPanel 什么都不做

java - 计算函数的运行时间

java - Unity3D - 构建播放器时出错 : Win32Exception:

android - 在 android 中使用自定义字体创建自定义通知

java - startActivity(intent) 未打开 Activity

android - 电子邮件问题(在电子邮件正文中发送超链接)android

java - Install4j:Windows 安装程序显示 java.lang.LinkageError:ClassCastException