0
着信コールが何らかのアクションを実行するようにトリガすると、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;
}
次のように私の着信クラスが同じ活動に内部クラスとして定義されています
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 –