我在保存应用程序的状态/单例时遇到问题。

当应用程序启动时,会显示加载屏幕( Activity ),并使用 Web 服务调用中的值初始化单例(请注意,网络访问无法在主线程上运行)。

创建单例后,我打开我的主要 Activity 。请注意,构建布局需要来自单例的值。

现在假设应用程序进入后台并被杀死(例如由于内存不足)。当应用程序被终止时,我的单例实例被删除。当我切换回我的应用程序时,它尝试重新创建主要 Activity 。正如我之前提到的,构建布局需要来自单例的值,因此这会导致 NullPointerException(当我尝试访问单例的成员时,因为它不再存在)。

我可以以某种方式告诉android在应用程序被杀死后开始第一个加载 Activity 吗?如果我可以在重新创建布局之前刷新单例,那就太好了,但这似乎是一个问题,因为网络调用不能在主线程上,因此在刷新完成之前不会阻塞。 我假设我可以在所有 Activity onStop 中保存单例并在 onCreate 方法中重新创建它,但这似乎有点太不可预测,并且可能会导致不一致的状态...

另一种方法可能是始终在停止时完成我的 Activity ,但这会导致丢失用户上次访问的选项卡等,即使应用程序没有被终止,所以这不是一个好的选择。

关于如何解决这个问题有什么想法吗?

请您参考如下方法:

为什么不直接使用 SharedPreferences 而不是单例呢?

任何时候你想保存一些全局状态,将其提交给首选项。任何时候你想读取全局状态,都可以从首选项中读回。

那么您根本不必担心应用程序生命周期,因为无论手机在做什么,您的数据都将始终被保留。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!