有些客户在启动应用时会直接遇到应用崩溃。
以下是主要活动中onCreate()方法的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String deviceId = Local.getUniqueID(this);
Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(deviceId));
setContentView(R.layout.main);
}
和getUniqueId()
执行此操作:
public static String getUniqueID(Context context) {
return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
}
此调用是否可能导致应用程序崩溃?我可以在onCreate()
中拨打这个电话吗?
或者是Thread.setDefaultUncaughtExceptionHandler()
崩溃了吗?
遇到此问题的用户甚至看不到应用程序的闪屏,我无法在我拥有的任何设备上重现该问题。
CustomExceptionHandler
只需获取异常/错误的堆栈跟踪,并将其发送到具有设备ID的服务器。我从遇到问题的用户那里获得了设备ID,但它不在数据库中。
有什么想法吗?我在任何设备上的开发都没有遇到过这个问题。可能是什么原因造成的?不要犹豫,询问更多细节。 感谢
编辑: 我想我发现当应用程序崩溃时堆栈跟踪会是什么:
E/AndroidRuntime(10067): FATAL EXCEPTION: main
E/AndroidRuntime(10067): java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
E/AndroidRuntime(10067): at android.app.LoadedApk.makeApplication(LoadedApk.java:482)
E/AndroidRuntime(10067): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3909)
E/AndroidRuntime(10067): at android.app.ActivityThread.access$1300(ActivityThread.java:122)
E/AndroidRuntime(10067): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1184)
E/AndroidRuntime(10067): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(10067): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(10067): at android.app.ActivityThread.main(ActivityThread.java:4340)
E/AndroidRuntime(10067): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(10067): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(10067): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(10067): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(10067): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(10067): Caused by: java.lang.NullPointerException
E/AndroidRuntime(10067): at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:362)
E/AndroidRuntime(10067): at android.app.LoadedApk.getClassLoader(LoadedApk.java:305)
E/AndroidRuntime(10067): at android.app.LoadedApk.makeApplication(LoadedApk.java:474)
E/AndroidRuntime(10067): ... 11 more
答案 0 :(得分:0)
我相信
Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
可以在某些设备上返回null。
所以你最终打电话给
new CustomExceptionHandler(null);
导致你的崩溃。
如果您附加了崩溃日志,则可以确认。