为什么我的Android应用程序在安装后直接启动崩溃?

时间:2012-06-28 13:11:37

标签: android

有些客户在启动应用时会直接遇到应用崩溃。

以下是主要活动中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

1 个答案:

答案 0 :(得分:0)

我相信

Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); 

可以在某些设备上返回null。

所以你最终打电话给

new CustomExceptionHandler(null);

导致你的崩溃。

如果您附加了崩溃日志,则可以确认。