Android утечка исключений IntentReceiver - PullRequest
0 голосов
/ 08 июля 2020

У меня есть активность, назовем ее A, которая запускается внутри фрагментов b и c. во фрагменте c у меня есть BroadcastReceiver, который я инициирую в отклонении класса следующим образом:

private final BroadcastReceiver mConnectionChangeReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            if (System.currentTimeMillis() - CustomizedDeviceListFragment.this.mStartTime > 200L) {
                CustomizedDeviceListFragment.this.updateErrorStates();
            }

        }
    };

, затем я регистрирую его в резюме:

public void onResume() {
    super.onResume();
    this.mStartTime = System.currentTimeMillis();
    this.getActivity().registerReceiver(this.mConnectionChangeReceiver, filter);
}

и отменяю регистрацию на паузе:

public void onPause() {
    this.getActivity().unregisterReceiver(this.mConnectionChangeReceiver);
    super.onPause();
}

все это делается во фрагменте c. теперь я иногда получаю сообщение об ошибке при активности A. это ошибка:

E/ActivityThread: Activity A has leaked IntentReceiver packageName.TcpClient$3@6ef2912 that was originally registered here. Are you missing a call to unregisterReceiver()?
    android.app.IntentReceiverLeaked: Activity A has leaked IntentReceiver packageName.TcpClient$3@6ef2912 that was originally registered here. Are you missing a call to unregisterReceiver()?
        at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:1707)
        at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:1438)
        at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1577)
        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1550)
        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1538)
        at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:641)
        at packageName.TcpClient$2.run(TcpClient.java:289)
        at java.lang.Thread.run(Thread.java:919)

почему возникает эта ошибка и как ее предотвратить?

...