Я пытаюсь использовать PhoneStateListener
, чтобы уведомить приложение, когда входящий вызов запускается, чтобы выполнить какое-либо действие. Я регистрирую свой 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;
}
Мой Incoming класс определяется как внутренний класс в одной и той же деятельности следующим образом:
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()
метод в моей деятельности, которая делает несколько операций.
Может ли кто-нибудь вести меня, как позаботиться об этой проблеме? Я борюсь с управлением памятью.
Получил некоторую идею отсюда http://stackoverflow.com/a/40539708/2006283 –