我的应用程序运行多次后出现内存问题。
java.lang.OutOfMemoryError: 位图大小超出 VM 预算
我想我不知何故泄漏了内存,所以我做了一个 DUMP HPROF 文件并使用 MAT 工具找出问题所在。 事实证明,在运行 5 次应用程序并退出后,我找到了 5 个 Activity 实例和 5 个 PhoneStateListener 实例。
如果我删除对 PhoneStateListener 的调用,我就不会再遇到这个问题,我只会看到我的 Activity 的 1 个实例。
问题是,我该如何解决这个问题?
谢谢
丹尼尔
这是我的代码:
OnCreate 方法:
telephonyManager.listen(mPhoneListener,
PhoneStateListener.LISTEN_SERVICE_STATE
| PhoneStateListener.LISTEN_SIGNAL_STRENGTH
| PhoneStateListener.LISTEN_CALL_STATE
| PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
| PhoneStateListener.LISTEN_DATA_ACTIVITY);
在 Activity 类上:
PhoneStateListener mPhoneListener = new PhoneStateListener() {
public void onCallStateChanged(int state,
java.lang.String incomingNumber) {
//do something
}
}
onDestroy 方法:
telephonyManager.listen(mPhoneListener, PhoneStateListener.LISTEN_NONE);
mPhoneListener = null;
最佳答案
onDestroy 不能保证被调用。来源:onDestroy Docs
您应该尝试在 onPause 上进行清理,然后在 onResume 上重新设置您需要的内容。这将有助于清理一些内存压力和泄漏。
关于android - PhoneStateListener 内存泄漏 - android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948706/