ListPopupWindow:你是否错过了对unregisterReceiver()的调用

时间:2015-05-20 20:37:13

标签: android

我只在一台设备上以严格模式崩溃(LG G2 Android 4.2.2)。这发生在我点击微调器(dropDown)然后点击列表下拉列表外的区域然后离开父活动。

05-20 14:39:55.099  20042-20042/** E/StrictMode? null
    android.app.IntentReceiverLeaked: Activity **.Activity has leaked IntentReceiver android.widget.ListPopupWindow$1@4278add0 that was originally registered here. Are you missing a call to unregisterReceiver()?
            at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:795)
            at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:596)
            at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1405)
            at android.app.ContextImpl.registerReceiver(ContextImpl.java:1385)
            at android.app.ContextImpl.registerReceiver(ContextImpl.java:1379)
            at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:423)
            at android.widget.ListPopupWindow.show(ListPopupWindow.java:546)
            at android.widget.Spinner$DropdownPopup.show(Spinner.java:983)
            at android.widget.Spinner.performClick(Spinner.java:610)
            at android.view.View$PerformClick.run(View.java:17634)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5171)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564)
            at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:-1)

onPause()方法中取消注册您的接收器。您必须在onResume()中注册接收器并在onPause()中取消注册以防止内存泄漏

@Override
protected void onResume() {
    super.onResume();
    registerReceiver(yourReceiver);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(yourReceiver);
}