android - PhoneStateListener 内存泄漏 - android

标签 android memory phone-state-listener

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

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/

相关文章:

android - 我们如何在 flutter 中创建超脚本文本或下脚本文本,就像我们过去使用 Spannable String 类在 android 中创建的那样?

android - 图像不填充 ImageView Android 中的宽度

android - android 上的 libsodium 集成

c++ - 优化C++中类实例的内存布局

google-app-engine - Google App Engine Go 内存管理

android - 即使在开机后也能收听电话状态

ANDROID:在 ScrollView 布局中使用 ShowcaseView 库

Java readline() 性能在后续测试中有所不同

android - 添加 PhoneStateListener

android - PhoneStateListener 从不在广播 android 中调用