活动生命周期和数据列表

时间:2015-03-19 18:43:46

标签: android memory android-activity android-lifecycle

我花了几个小时阅读有关活动生命周期的教程,但我仍然不太明白。假设我有一个MainActivity,其中包含一些只是模型类的对象的List。我目前只是将它们保存在onSaveInstanceState中并在onRestoreInstanceState中恢复并且它始终有效,但是根据我的阅读它并不是正确的方法。

当应用程序暂停时,我没有看到将列表归零以释放内存的一点,因为它仍然可见,并且在我的应用程序中有一些自然的方式,它会进入暂停状态。

棘手的部分是停止 - 如果它被杀死然后onCreate被调用,那么onRestoreInstanceState一切都没问题。但是,如果没有,我不能使列表为空,因为下一个方法是onRestartonStart,他们不会将savedInstanceState作为参数,所以我可以' t恢复arrayList中的数据,即使我想释放onStop中的内存。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:1)

这是android Activity的工作原理。如果您希望系统管理您的活动生命周期,您应该找不到自己的解决方案。但是,在某些情况下,您需要保持一些对象存活。你没有多少选择:

单身模式 - 绝对不是最好的模式。风险很大,但很容易实现。

自定义应用程序类 - 只需扩展Application类,添加一些字段以保存数据,将此类链接到清单中。

保留碎片:http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

对我而言,Dagger的依赖注入效果很好,但这种方法仍有很大的开销,特别是对于小型项目。

修改

根据您的评论 - 假设您需要在应用程序中显示一些图像 - 您应该创建一些"静态"数据缓存的实例(例如:http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html)。 您还可以访问此组件并管理其生命周期。自然的地方是自定义应用程序类。这里有一些例子:http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/

答案 1 :(得分:0)

您不需要在onStop中释放内存并保存状态,这应该在onDestroy中完成。 停止时,Activity会使内存保持活动状态,但如果系统需要则会被销毁。