最近,当MainActivity调用onResume()时,我有时会遇到此异常.
java.lang.RuntimeException: Unable to resume activity {com.qau4d.c35s3.androidapp/com.xxx.XXX.XXX.MainActivity}: java.lang.IllegalArgumentException
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3400)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3440)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1510)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.IllegalArgumentException
at android.os.Parcel.readException(Parcel.java:1687)
at android.os.Parcel.readException(Parcel.java:1636)
at android.app.ActivityManagerProxy.isTopOfTask(ActivityManagerNative.java:5475)
at android.app.Activity.isTopOfTask(Activity.java:5961)
at android.app.Activity.onResume(Activity.java:1252)
at com.qau4d.c35s3.androidapp.onResume(XActivity.java:29)
at com.qau4d.c35s3.androidapp.onResume(MainActivity.java:196)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1269)
at android.app.Activity.performResume(Activity.java:6768)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3377)
Run Code Online (Sandbox Code Playgroud)
只有in MainActivity和super class .经过长时间的正常开发后得到这个异常真的很奇怪.我查了一些相关的参考资料但没有得到.XActivitysuper.onResume();
小智 7
在方法Activity#isTopOfTask中我们可以看到:
private boolean isTopOfTask() {
if (mToken == null || mWindow == null) {
return false;
}
try {
return ActivityManager.getService().isTopOfTask(getActivityToken());
} catch (RemoteException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在ActivityManagerService#isTopOfTask中我们可以找到:
@Override
public boolean isTopOfTask(IBinder token) {
synchronized (this) {
ActivityRecord r = ActivityRecord.isInStackLocked(token);
if (r == null) {
throw new IllegalArgumentException();
}
return r.task.getTopActivity() == r;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我认为ActivityRecord是null.但我不知道为什么它是null ....
您的问题中没有足够的信息来确定原因java.lang.IllegalArgumentException,不幸的是,androidActivityThread没有记录该异常的堆栈跟踪,并且异常消息似乎为空。
然而,看起来有一条前进的道路。该异常由方法中的以下代码处理ActivityThread::performResumeActivity:
} catch (Exception e) {
if (!mInstrumentation.onException(r.activity, e)) {
throw new RuntimeException(
"Unable to resume activity "
+ r.intent.getComponent().toShortString()
+ ": " + e.toString(), e);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您Instrumentation为您的活动注册一个类,则应该可以使用一种onException方法来记录因果异常的堆栈跟踪。另一种可能性是Thread.setUncaughtExceptionHandler用于IllegalArgumentException为抛出的线程设置处理程序。
这些不会解决问题(!),但它会让你更接近解决方案。
| 归档时间: |
|
| 查看次数: |
5827 次 |
| 最近记录: |