我有一个应用程序,一个包含片段的活动应用程序。
这个应用程序的通常用例是,你启动它并把电话拿走,不时,你回到手机并插入一些数据...这是一个日志应用程序,你正在做一些事情并插入你的结果进入应用程序...
我有这个问题,不时地,我的活动被摧毁并用空包重新创建......(大多数时候情况并非如此,但偶尔会发生这种情况......)。我的应用程序有时会启动服务,即使这种服务在这种情况下被杀死......
这意味着系统已杀死我的应用程序,是吗?我怎么能避免这个?
我需要保留用户数据和当前的顶级片段......并且它们被保存到捆绑包中,只要状态和数据得到保存,一切正常...
顺便说一句,我的活动始终是TOP ACTIVITY,只是屏幕经常关闭......我只想让我的活动尽可能长时间活着,直到用户离开后面的按钮......或者保存状态可靠
重要的提示
onSaveInstance并不总是有效(它不是生命周期的一部分,因此不能保证被调用)...它只能在大多数情况下工作......我需要一种方法来始终工作...如果android杀了我的应用程序。 ..
不要将你的应用程序留在内存中
您不希望阻止Android杀死您的应用。你想要的是正确恢复你的应用程序的状态。然后,用户将永远不会注意到应用程序已被销毁,并且用户仍然可以获得在不使用时销毁的应用程序的好处。
如果你真的想要这个使用唤醒锁。这会耗尽你的用户电池,所以在实施这个之前我要三思而后行 如何防止Android设备以编程方式进入睡眠状态?
onSaveInstanceState解释
为此,请检查捆绑包中需要哪些信息,并将该信息保存在 onSaveInstanceState(bundle:Bundle)
方法,以便您可以重复使用它 onCreate(sameBundle:Bundle)
。
有关Google文档的更多信息,请访问: 保存您的活动状态 和 恢复您的活动状态。
关于Android Activity生命周期
正如@ prom85在下面的评论中所述,它不能保证 onSaveInstanceState
方法将被调用,因为它不是生命周期的一部分。解决方法是使用 onPause
生命周期钩子,以确保您的数据存储。
更多信息在 Android:不从活动中调用onSaveInstanceState
我有一个类似的问题,我在搜索解决方案时到达了这个帖子,你必须使用清单来实现这一点,并且还要了解Android生态系统中究竟是什么活动,
在Android活动中,任务具有预定义的工作。
我在文档中挖掘了很多,我发现,我们可以通过两种方式配置活动,
- 一贯
- 非持久
如果你提到清单中的活动为
android:persistent="true"
并运行以下用例
- 启动APP
- 按返回或主页按钮
- 您再次选择后堆栈中的活动以将其置于前面
活动进入开始 - >暂停 - >停止 - >恢复,它没有进入onDestroy方法。
如果不提
android:persistent="true"
对于相同的用例
活动进入开始 - >暂停 - >停止 - >销毁,如果从后堆栈中选择活动
活动进入resume-> create-> start
如果要在活动启动时运行服务/任务,并在应用程序处于后台堆栈时继续运行,则必须在onCreate方法中启动它,并通过在清单中将活动指定为持久性来终止它们。
我希望我的上述解决方案可以帮助其他人来到这里解决同样的问题