【发布时间】:2014-02-18 17:16:56
【问题描述】:
我正在尝试使 AndroidRuntime 异常 StackTrace 与 Logcat 相同。但是,当我重写 UncaughtExceptionHandler 的 uncaughtException 时,它给了我一个不同于 LogCat 的 StackTrace。这是我的代码:
private Thread.UncaughtExceptionHandler aovUncaughtExceptionHandler =
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
StackTraceElement stackTrace[] = thread.getStackTrace();
int stackTraceLength=stackTrace.length;
String exceptionDescription = "";
for (int i=0; i<stackTraceLength; i++) {
exceptionDescription = exceptionDescription + stackTrace[i];
}
setException(exceptionDescription,true);
applicationExceptionHandler.uncaughtException(thread,ex);
}
};
public AovGaTracker() {
applicationExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(aovUncaughtExceptionHandler);
}
这是使用 Exception 作为堆栈跟踪源时的堆栈跟踪:
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
android.app.ActivityThread.access$800(ActivityThread.java:139)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:136)
android.app.ActivityThread.main(ActivityThread.java:5102)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
dalvik.system.NativeStart.main(Native Method)
这里是使用 Thread 作为 stackTace 源时的 stackTrace:
dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:579)
com.example.googleanalytics.AovGaTracker$1.uncaughtException(AovGaTracker.java:28)
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
dalvik.system.NativeStart.main(Native Method)
这里应该是来自 Logcat 的 StackTrace(这是我需要的):
FATAL EXCEPTION: main
Process: com.example.myfirstapp, PID: 18207
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.MainActivity}:
java.lang.IllegalArgumentException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5102)
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:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.IllegalArgumentException
at com.example.myfirstapp.MainActivity.onCreate(MainActivity.java:21)
at android.app.Activity.performCreate(Activity.java:5248)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
... 11 more
在执行uncaughtException(Thread thread, Throwable ex) 之后,我是否可以执行获取stacktrace?我需要使用异步任务吗?我需要在同一个线程上编写 asynctask 吗?
【问题讨论】:
标签: android multithreading exception-handling android-asynctask stack-trace