我有一个 Android 应用程序最近神秘地强制关闭了一些使用 4.x 设备的用户。查看异常堆栈,似乎错误发生在我的任何代码运行之前,但我认为我正在做一些导致这种情况的事情。
*我找到原因或堆栈的方式有问题吗?否则,如果这是一个完整的堆栈跟踪,Android 是否真的有可能在我的任何代码运行之前失败?*
我发现后者不太可能,因为我UncaughtExceptionHandler
在 myApplication
的onCreate()
方法中注册了 my ,并且我通常从我的用户那里获取文件。
我的错误记录代码如下:
我Thread.UncaughtExceptionHandler
使用应用程序的 . 当发生错误时,我将异常信息写入登录uncaughtException(Thread thread,Throwable ex)
。这就是我找到要打印的字符串的方式:
// Get exception info
String newLine = "\r\n";
String message = "Message: " + ex.getMessage();
String cause = "Cause: " + ex.getCause();
StackTraceElement[] stes = ex.getStackTrace();
String stack;
// build stack trace
stack = "Stack: " + newLine;
for ( int i = 0; i < stes.length; i++ )
{
stack += stes[i].toString();
stack += newLine;
}
// print out message
// print out cause
// print out stack
将其输出到文件:
Message: Unable to create application com.(Modified app name for anonimity).*.*Application: java.lang.IllegalArgumentException
Cause: java.lang.IllegalArgumentException
Stack:
android.app.ActivityThread.handleBindApplication(ActivityThread.java:4254)
android.app.ActivityThread.access$1400(ActivityThread.java:140)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1297)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:137)
android.app.ActivityThread.main(ActivityThread.java:4921)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
dalvik.system.NativeStart.main(Native Method)
PS 是的,我知道 ACRA,但我现在不想使用它。