尽可能防止活动被破坏

pro*_*m85 14 android fragment android-lifecycle android-activity

我有一个应用程序,一个包含片段的活动应用程序.

这个应用程序的通常用例是,你启动它并把电话拿走,不时,你回到手机并插入一些数据......这是一个日志应用程序,你正在做一些事情并插入你的结果进入应用程序...

我有问题,不时,我的活动被摧毁,并用空包重新创建......(大多数时候情况并非如此,但不时发生这种情况......).我的应用程序有时会启动服务,即使这种服务在这种情况下被杀死...

这意味着系统已杀死我的应用程序,是吗?我怎么能避免这个?

我需要保留用户数据和当前的顶级片段...并且它们被保存到捆绑包中,只要状态和数据得到保存,一切都会正常工作......

顺便说一句,我的活动始终是TOP ACTIVITY,只是屏幕经常关闭......我只想让我的活动尽可能长时间活着,直到用户离开后面的按钮......或者保存状态可靠

重要的提示

onSaveInstance并不总是有效(它不是生命周期的一部分,因此不能保证被调用)...它只能在大多数情况下工作......我需要一种方法来始终工作...如果android杀了我的应用程序. ..

hcp*_*cpl 9

不要将你的应用程序留在内存中

您不希望阻止Android杀死您的应用.你想要的是正确恢复你的应用程序的状态.然后,用户将永远不会注意到应用程序已被销毁,并且用户仍然可以获得在不使用时销毁的应用程序的好处.

如果你真的想要这个使用唤醒锁.这会耗尽你的用户电池,所以在实现这个之前我要三思而后行... 如何防止Android设备以编程方式进入睡眠?

onSaveInstanceState解释

为此,请检查捆绑包中需要哪些信息,并使用该onSaveInstanceState(bundle:Bundle)方法保留该信息,以便您可以重复使用该方法onCreate(sameBundle:Bundle).

有关保存您的活动状态恢复活动状态的 Google文档的更多信息.

关于Android Activity生命周期

正如@ prom85在下面的评论中所述,不能保证onSaveInstanceState调用该方法,因为它不是生命周期的一部分.解决方法是使用onPause生命周期钩子来确保存储数据.

Android上的更多信息:onSaveInstanceState未从活动中调用


ara*_*ara 6

我遇到了类似的问题,我在寻找解决方案时到达了这篇文章,你必须使用清单来实现这一点,并且还要了解 Android 生态系统中的活动到底是什么,

在 Android 中,活动是一个具有预定义工作的任务。

我在文档中挖掘了很多,我发现,我们可以通过两种方式配置活动,

  1. 执着的
  2. 非持久

如果您在清单中提到该活动为

android:persistent="true"
Run Code Online (Sandbox Code Playgroud)

并运行以下用例

  1. 启动应用程序
  2. 按返回或主页按钮
  3. 您再次选择后堆栈中的活动以将其置于前面

Activity进入start->pause->stop->resume,并没有进入onDestroy方法。

如果不提及

android:persistent="true"
Run Code Online (Sandbox Code Playgroud)

对于相同的用例

Activity进入开始->暂停->停止->销毁,并且如果从返回堆栈中选择该Activity

Activity进入resume->create->start

如果您想在活动启动时运行一个服务/任务,该服务/任务在应用程序位于后台堆栈时保持运行,那么您必须在 onCreate 方法中启动该服务/任务,并通过在清单中将您的活动指定为持久性来在 onDestroy 上终止它们。

我希望我的上述解决方案可以帮助其他遇到同样问题的人

  • Android 活动不支持此属性。它仅适用于应用程序。检查 https://developer.android.com/guide/topics/manifest/application-element.html 了解详细信息。 (4认同)