在我的应用中,我使用下面的代码向用户显示通知设置。
以下是代码。
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)
知道怎么不泄漏这个?
由于
答案 0 :(得分:0)
您没有为unregisterReceiver()
BroadcastReceiver
注册的registerReceiver()
致电AppNotificationSettingsActivity
的问题
在停止活动时取消注册您的收件人:
@Override
protected void onStop(){
unregisterReceiver(your_receiver);
super.onStop();
}