【发布时间】:2017-05-06 12:44:04
【问题描述】:
我正在尝试使用PhoneStateListener 在来电触发时通知我的应用程序以执行某些操作。我在我的活动的onResume() 方法中注册了我的PhoneStateListener,如下所示。
@Override
protected void onResume() {
super.onResume();
tmgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
incomingCallListener=new IncomingCallListener();
tmgr.listen(incomingCallListener, phoneStateListener.LISTEN_CALL_STATE);
}
onPause() 我的活动方法我使用以下代码删除了侦听器。
@Override
protected void onPause() {
super.onPause();
incomingCallListener=null;
tmgr.listen(incomingCallListener, PhoneStateListener.LISTEN_NONE);
tmgr=null;
}
我的传入类在同一个活动中定义为内部类如下:
public class IncomingCallListener extends PhoneStateListener {
public IncomingCallListener() {
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
if (qInProgress) {
if (qSource.equals(Loading.TYPE_FUN) || (qResumable)) {
//Allow to Resume
} else {
//Break and send abort
sendAbort();
}
}
}
}
}
我正在使用 LeakCanary lib 来检查内存泄漏,我的活动中出现了 6.1Mb 的内存泄漏。
sendAbort() 是我的活动中的方法,它执行的操作很少。
有人可以指导我如何处理这个问题吗?我正在为内存管理而苦苦挣扎。
【问题讨论】:
-
从这里得到一些想法stackoverflow.com/a/40539708/2006283
标签: android memory memory-leaks phone-state-listener leakcanary