我在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对象的目的。
但是,我的设计中可能会出现资源泄漏。
cache
将变为空。 但是,我没有机会调用cache.cleanUp 在这种情况下,我们遇到资源泄漏,因为之前分配的旧线程处理第一个缓存对象拥有的文件句柄仍在系统中。我们无法处理它们,因为第一个缓存对象被系统破坏。
我希望系统有一个回调,只要系统决定因为按下主页而销毁我的应用程序。通过这样的回调,我可以在我的静态对象被销毁之前执行必要的清理调用。
我可以知道如何实现这一目标吗?
答案 0 :(得分:1)
GC会照顾它。这就是你的应用程序被杀的原因。这样就可以清理这些内存并被其他应用程序使用。在这种情况下,我们正在进行资源泄漏,就像先前分配的一样 旧的线程句柄,第一个缓存对象拥有的文件句柄仍然是 在系统中
答案 1 :(得分:0)
if(cache!=null) {
cache.cleanUp();
}
你最好假设逻辑“我会这样做,只有当缓存不为空时。”
答案 2 :(得分:0)
主页按键没有回调方法。如果你想在Home键按下销毁你的应用程序,最好按后退键设置一个静态变量(onKeyUp和keycode == back_key)。和onPause方法,如果未设置该变量,则销毁该活动(finish();)。
长按主页按钮。我的应用程序仍然应该出现在list.On ::最近活动的列表中,它不依赖于杀死你的活动等......