我对Android活动的生命周期非常熟悉,但是我感觉缺少了一些在这里应该很明显的东西。

我有一个多功能的Android应用程序;它使用静态变量(在应用程序类中)来保持在不同视图中使用的各种对象的句柄。当应用程序暂停(退出)并且Android(大概)清理内存以维护前台进程时,就会发生问题。当用户恢复应用程序时,它似乎偶尔(并非总是)返回并在用户离开的“活动”中恢复,但静态变量为空。更糟糕的是,活动有时似乎在静态变量仍然存在的情况下恢复,但对象的内部变量为空。

我最终实现了一个简单的健全性检查,该检查可检查静态变量是否为空(以及相关对象的最重要的内部变量)是否为空,并在应用程序失败时使应用程序启动。这确实减少了很多问题,但是我仍然看到偶尔出现的问题,因为检查每个resume()的所有内容根本不切实际。

我真正需要的是,如果Android OS决定在应用程序处于非活动状态时需要从内存中清除所有非GC的内容,则应从头开始重新启动应用程序。我觉得应该有一个优美的方法来做到这一点,但是没有注意到文档中的任何内容。

有什么想法吗?别人如何避免这个问题?

最佳答案

如果Android决定完全杀死您的进程,那么使用Application类保留状态可能会导致意外行为。查看this answer to a similar question
也就是说,您可能应该在Activity生命周期回调中使用某种持久性(SharedPreferences或某些DB)。

07-24 09:44
查看更多