我继承了一个使用非Android实践实现的大型Android应用。该应用程序有几十个活动,并使用该应用程序作为缓存数据的单例。应用程序在长时间闲置后崩溃 - 这可能发生在设备位于单个活动上或从应用程序菜单的最近历史记录重新启动时(通常为空引用问题。)
我的问题是 - 是否有技术或工具忠实地强制资源释放行为发生而不等待操作系统回收内存?
答案 0 :(得分:1)
如果您想通过绞拧器运行应用程序,请在设备的开发选项下,勾选Don't keep Activities
。但是,这不会解决Application类下的单例存储问题;只有在应用程序完全被强制内存后,才会处理Application类。
答案 1 :(得分:0)
首先,如果您需要保留任何状态数据,则应使用内置生命周期方法并从您的Application
类中提取缓存行为。使用savedInstanceState Bundle
和Parcelable
界面。
您可以采取一些措施来确保资源在活动过程中被破坏。在onDestroy()
(如果您在片段中,则为onDestroyView()
),将所有成员变量设置为null。避免持有对其他活动的引用。 Android将调用生命周期方法并尝试回收内存。可以在将来创建相同活动的新实例,但旧引用可能会延续,因为它仍然被指向。