【问题标题】:Starting android notification settings activity causes Leaked intent receiver启动 android 通知设置活动会导致泄漏的意图接收器
【发布时间】:2017-11-23 01:06:53
【问题描述】:

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

下面是代码。

    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)

知道如何不泄露这个吗?

谢谢

【问题讨论】:

    标签: android memory memory-leaks


    【解决方案1】:

    问题是您没有为BroadcastReceiverAppNotificationSettingsActivity 上注册的registerReceiver 调用unregisterReceiver

    在您的活动中取消注册您在onStop 中的接收器:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多