我花了几个小时阅读有关活动生命周期的教程,但我仍然不太明白。假设我有一个MainActivity,其中包含一些只是模型类的对象的List。我目前只是将它们保存在onSaveInstanceState
中并在onRestoreInstanceState
中恢复并且它始终有效,但是根据我的阅读它并不是正确的方法。
当应用程序暂停时,我没有看到将列表归零以释放内存的一点,因为它仍然可见,并且在我的应用程序中有一些自然的方式,它会进入暂停状态。
棘手的部分是停止 - 如果它被杀死然后onCreate
被调用,那么onRestoreInstanceState
一切都没问题。但是,如果没有,我不能使列表为空,因为下一个方法是onRestart
和onStart
,他们不会将savedInstanceState
作为参数,所以我可以' t恢复arrayList中的数据,即使我想释放onStop
中的内存。我怎么能做到这一点?
答案 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会使内存保持活动状态,但如果系统需要则会被销毁。