其他分享
首页 > 其他分享> > android-alwaysRetainTaskState无法正常工作.单身人士阶层正在失去状态

android-alwaysRetainTaskState无法正常工作.单身人士阶层正在失去状态

作者:互联网

在我的应用第一次运行时,在根活动上,要求用户选择某些选项,这些选项确定将从数据库为他下载哪些数据.

一旦他选择了该选项,就下载数据并将其保存在一个单例类中,只要应用程序正在运行,该类就应保留该数据. (即使在后台)

我的问题是,有时用户退出我的应用程序一段时间后(使用主屏幕按钮),Android显然会终止我的应用程序中的某些活动,并且以某种方式,它们会重置重要的单例类.一旦我尝试访问应该保留在单例中的数据,就使我的应用程序收到各种null引用异常.

我了解到,Android操作系统有时可以选择终止应用程序,但允许用户从上一次访问的活动中恢复到该应用程序.有时,它只是杀死了整个应用程序,并迫使用户从头开始.

我一直在寻找解决方案,并且发现了可以应用于根活动的“ android:alwaysRetainTaskState”属性.显然,每当android决定终止我的应用程序时,它至少会迫使用户从可以重新下载数据的第一个活动开始,而不是允许用户从更高级的活动开始,从而导致他空异常.

但是,当我将其应用到我的应用程序上时,它不起作用,当我返回到我的应用程序时,我是从一个高级活动开始的,其中有一个空的单例实例.

我还尝试了“ android:clearTaskOnLaunch”,它确实有效,但这是一个过大的选择,因为我不希望用户每次返回应用程序时都必须重新开始.我希望只有在Android决定终止该应用程序的情况下才能实现.

我做错了什么吗?是否有可能有更好的解决方案来保持单例生存?

谢谢!

解决方法:

不.没有更好的解决方案.这就是它的工作方式. Android可以随时终止应用程序的进程(只要它在后台).您可以将数据保留为单例,但是Android总是有可能终止您的进程.当用户返回到您的应用程序时,Android将创建一个新流程,然后创建该用户正在继续的活动的新实例.您需要将代码放入所有活动的onCreate()中,以识别您的单例已消失,然后执行适当的操作(重定向到应用程序的根活动或重新初始化您的单例.

判断您的进程是否已被杀死并重新创建很容易.只需将静态布尔变量添加到已初始化的单例中即可,该变量设置为true.在所有活动的onCreate()中,检查该变量的状态,并在变量为false时执行一些智能操作.

标签:android-activity,android-lifecycle,android
来源: https://codeday.me/bug/20191201/2079653.html