gpt4 book ai didi

android - PhoneStateListener 内存泄漏 - android

转载 作者:行者123 更新时间:2023-11-29 14:23:45 27 4
gpt4 key购买 nike

我的应用程序运行多次后出现内存问题。

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com