启动android通知设置活动会导致泄漏意图接收器

时间:2017-11-23 01:06:53

标签: android memory memory-leaks

在我的应用中,我使用下面的代码向用户显示通知设置。

以下是代码。

    private void startNotificationSettings(){
    final Activity activity =  getActivity();
    Intent intent = new Intent();
    intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");

    if(UIUtils.isAVersion(8)){
        intent.putExtra("android.provider.extra.APP_PACKAGE", activity.getPackageName());

    }else if(UIUtils.isAfterVersion(Build.VERSION_CODES.LOLLIPOP )){
        intent.putExtra("app_package", activity.getPackageName());
        intent.putExtra("app_uid", activity.getApplicationInfo().uid);
    }else{
        Util.alert(activity,"Warning!","Operation not supported for your OS version",Util.ALERT_NO_ACTION);
        return;
    }
    startActivity(intent);
}

它没有问题但是当我按下后退按钮时它会抛出下面的错误。

Activity com.android.settings.Settings$AppNotificationSettingsActivity has leaked IntentReceiver com.android.settings.accounts.AuthenticatorHelper@cb5c59f that was originally registered here. Are you missing a call to unregisterReceiver()?
                                               android.app.IntentReceiverLeaked: Activity com.android.settings.Settings$AppNotificationSettingsActivity has leaked IntentReceiver com.android.settings.accounts.AuthenticatorHelper@cb5c59f that was originally registered here. Are you missing a call to unregisterReceiver()?
                                                   at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:1030)
                                                   at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:817)
                                                   at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1256)
                                                   at android.app.ContextImpl.registerReceiverAsUser(ContextImpl.java:1243)
                                                   at android.content.ContextWrapper.registerReceiverAsUser(ContextWrapper.java:595)
                                                   at com.android.settings.accounts.AuthenticatorHelper.listenToAccountUpdates(AuthenticatorHelper.java:264)
                                                   at com.android.settings.SettingsActivity.onCreate(SettingsActivity.java:1706)
                                                   at android.app.Activity.performCreate(Activity.java:6876)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
                                                   at android.app.ActivityThread.access$1100(ActivityThread.java:221)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:158)
                                                   at android.app.ActivityThread.main(ActivityThread.java:7224)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

知道怎么不泄漏这个?

由于

1 个答案:

答案 0 :(得分:0)

您没有为unregisterReceiver()

BroadcastReceiver注册的registerReceiver()致电AppNotificationSettingsActivity的问题

在停止活动时取消注册您的收件人:

@Override
protected void onStop(){
    unregisterReceiver(your_receiver);
    super.onStop();
}