现在,当内存不足或应用程序被系统杀死时,我在Android中遇到了一些问题。
情景1:
我在一个类中设置了一些静态成员,我发现在某些情况下,当应用程序仍在运行时,它将被系统删除。
我的问题是:这种GC何时运行?
情景2:
如果我切换到另一个大型应用程序,然后切换回我的应用程序(名为App_A)。 App_A有时会被系统回收,并在切换回来时重新启动最后一个活动。
但是有一些应用程序范围的数据(比如登录信息)我保存在单身人士中。
我的问题是:是否会删除以单例保存的应用程序范围的数据? 如果是,是否有适当的方法来恢复数据?
我的努力是:
Context
传递给每个公共函数,让每个人都能够恢复数据。但是我认为在某些需要快速运行的情况下使用该功能会不友好。答案 0 :(得分:1)
我只能回答关于场景2的问题。
Android将尝试将最近使用的应用程序保留在内存中,但如果用户切换到另一个应用程序并且内存开始运行不足,操作系统可以选择终止最近使用的应用程序,以便为运行的应用程序提供更多内存。
我遇到了同样的问题,我在静态单例中有一些像用户名这样的用户上下文数据。在使用其他许多应用程序后返回应用程序时,此数据将消失。
我解决这个问题的方法是使用活动的意图。由于用户数据是在应用程序的开头检索的,因此我只是将这些数据传递给他们意图中的后续活动。因为操作系统存储了意图并使用它来重新创建不在内存中的活动,所以我的数据不再容易被垃圾收集。
还要考虑其他持久化数据的方法:共享首选项,文件系统,SQLite数据库。但是,从不依赖于活动开始时可用的先前执行的静态数据。
答案 1 :(得分:0)
使用单例来保存一些数据通常是个坏主意 最佳实践是使用任何持久存储 - SQLite,Realm,JSON或任何文件 最简单的方法是保存您的登录数据。在JSON中 - 然后在Application类中将onCreate方法解析为POJO - 然后您可以从应用程序的任何位置获取它。并在应用关闭或任何更改时存储到文件。 无论如何,我建议你阅读有关持久性,内存管理和性能提示的Android指南。