use*_*565 2 android localbroadcastmanager
我在主活动中使用 BroadcastReceiver 并在 OnCreate 中注册它并尝试在 Destroy 上取消注册它,但有时应用程序崩溃,因为它表明我正在尝试取消注册已取消注册的接收器。这是我的代码:
\n\n@Override\n public void onCreate(Bundle savedInstanceState) {\n ...\nLocalBroadcastManager.getInstance(this).registerReceiver(forceLogoutRequest, new IntentFilter(CommonUtils.FORCE_LOGOUT));\n}\n\n @Override\n public void onDestroy() {\n super.onDestroy();\nif(forceLogoutRequest!=null) {\n unregisterReceiver(forceLogoutRequest);\n forceLogoutRequest = null;\n }\n}\n\n\n private BroadcastReceiver forceLogoutRequest = new BroadcastReceiver() {\n @Override\n public void onReceive(Context context, Intent intent) {\n ..\n ..\n\n }\n };\nRun Code Online (Sandbox Code Playgroud)\n\n这就是我在控制台中得到的:
\n\n 10-12 13:28:34.644 5772-6344/? E/AndroidRuntime: FATAL EXCEPTION: main\n Process: com.myapp.nurse, PID: 5772\n java.lang.RuntimeException: Unable to destroy activity java.lang.IllegalArgumentException: Receiver not registered: com.myapp.hp.nurse.activity.MainActivity$5@1a174913\n at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3812)\n at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3830)\n at android.app.ActivityThread.access$1400(ActivityThread.java:156)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)\n at android.os.Handler.dispatchMessage(Handler.java:102)\n at android.os.Looper.loop(Looper.java:211)\n at android.app.ActivityThread.main(ActivityThread.java:5373)\n at java.lang.reflect.Method.invoke(Native Method)\n at java.lang.reflect.Method.invoke(Method.java:372)\n at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)\n Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.myapp.hp.nurse.activity.MainActivity$5@1a174913\n at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:771)\n at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1671)\n at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:511)\n at com.myapp.hp.nurse.activity.MainActivity.onDestroy(MainActivity.java:327)\n at com.myapp.hp.nurse.activity.NfcEnabledActivity.onDestroy(NfcEnabledActivity.java:49)\n at android.app.Activity.performDestroy(Activity.java:6169)\n at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1141)\n at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3799)\n at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3830)\xc2\xa0\n at android.app.ActivityThread.access$1400(ActivityThread.java:156)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:102)\xc2\xa0\n at android.os.Looper.loop(Looper.java:211)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:5373)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at java.lang.reflect.Method.invoke(Method.java:372)\xc2\xa0\n at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)\xc2\xa0\n 10-12 13:28:36.316 5772-6344/? I/Process: Sending signal. PID: 5772 SIG: 9\nRun Code Online (Sandbox Code Playgroud)\n
用这个代替
LocalBroadcastManager.getInstance(this).unregisterReceiver(forceLogoutRequest);
Run Code Online (Sandbox Code Playgroud)
有关使用 localBroadCastManager 的更多信息,请查看此链接https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
| 归档时间: |
|
| 查看次数: |
1603 次 |
| 最近记录: |