我在运行4.4.2的SAMSUNG-SGH-I337上发生了以下崩溃:
java.lang.RuntimeException: Unable to pause activity {com.example/com.example.activities.MyActivity}: java.lang.IllegalArgumentException: Receiver not registered: com.example.activities.MyActivity$1@42b51940
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3248)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3203)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3181)
at android.app.ActivityThread.access$1100(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1276)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException: Receiver not registered: com.example.activities.MyViewActivity$1@42b51940
at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:671)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1798)
at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:501)
at com.example.activities.MyViewActivity.onPause(MyViewActivity.java:165)
at android.app.Activity.performPause(Activity.java:5530)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1251)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3234)
... 12 more
我只在BroadcastReceiver
内注册我的MyActivity#onResume
,我只在MyActivity#onPause
内取消注册。
基本上,似乎onPause
在没有相应的onResume
的情况下被调用,或Activity#registerReceiver
由于某种原因而失败。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myFilter = new IntentFilter("myIntent");
myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
}
};
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(myReceiver, myFilter);
}
@Override
protected void onPause() {
unregisterReceiver(myReceiver);
super.onPause();
}
这似乎与Receiver not registered类似,但这是由作者没有创建他们的BroadcastReceiver
造成的,正如您所看到的,我绝对创造了我的。
答案 0 :(得分:2)
Google seems to think this is a Samsung-only problem.因此,我可能只需要通过IllegalArgumentException
中的onPause
来解决问题。