我有以下代码Activity
// Cache object is holding other resources like thread handle, file handle.
// Explicit clean up is required when it is no longer used.
public static Cache cache = new Cache();
@Override
public void onPause() {
super.onPause();
if (this.isFinishing()) {
cache.cleanUp();
}
}
请注意,我需要进行isFinishing
检查,因为手机轮换、主页新闻、启动新活动......也会触发onPause
。因此,由于这种“简单”操作而清理缓存破坏了拥有 Cache 对象的目的。
但是,我的设计中存在资源泄漏的可能性。
- 运行应用程序
- 新闻主页
- 通过运行其他内存密集型应用程序,按 Home,再次运行其他应用程序来运行它们。
- 在某些时候,系统发现它应该删除我的应用程序,因为它已经有一段时间没有激活了。因此,
cache
将变为空。但是,我没有机会调用 cache.cleanUp - 长按主页按钮。我的应用程序仍应出现在列表中。
- 选择它。该活动将再次 onCreate,并且将再次创建静态缓存的第二个实例。
在这种情况下,我们遇到了资源泄漏,因为之前分配的旧线程句柄、第一个缓存对象拥有的文件句柄仍在系统中。我们无法处理它们,因为第一个缓存对象已被系统销毁。
我希望系统有一个回调,每当系统由于主页按下而决定销毁我的应用程序时。通过这样的回调,我可以在静态对象被销毁之前对它们执行必要的清理调用。
我可以知道我怎么能做到这一点?