0

一些客户在启动应用程序时直接遇到应用程序崩溃。

这是主要活动中 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
4

1 回答 1

0

我相信

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

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

所以你最终打电话

new CustomExceptionHandler(null);

这会导致您的崩溃。

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

于 2012-07-02T15:58:24.013 回答