java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
at android.app.ActivityThread.-wrap14(ActivityThread.java:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method:0)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: java.lang.ClassCastException:
at com.myapp.ui.BaseActivity.getApp(BaseActivity.java:193)
at com.myapp.ui.BaseActivity.onCreate(BaseActivity.java:275)
at com.myapp.ui.CastActivity.onCreate(CastActivity.java:39)
at com.myapp.ui.MainActivity.onCreate(MainActivity.java:268)
at android.app.Activity.performCreate(Activity.java:6955)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
BaseActivity的getApp方法是:
public App getApp() {
return (App) getApplication();
}
App 类是
public class App extends MultiDexApplication { ...
在清单应用程序标签中包含对该类的引用。
<application
android:name="com.myapp.App"
98%的崩溃发生在Android 7.0,其余2%发生在7.1。其他版本的Android不受影响。
编辑:我使用proguard,所以这可能与此有关,但保留类。
-keep class com.myapp.** { *;}
-keep interface com.myapp.** { *;}
注意:可能与此相关,但在某些Android版本中,似乎不会调用App的onCreate方法。我观察到这一点是因为从Service(由AlarmManager启动)或BroadcastReceiver访问时,在onCreate中创建的某些对象为空。
有人知道是什么原因导致这种情况,如何解决或绕过?谢谢
编辑2: 最终我得到了以下解决方案:
public App getApp() {
Application application = getApplication();
App app = null;
try {
app = (App) application;
} catch (Exception e) {
if (application != null) {
Log.e(TAG, "getApp Exception: application class: " + application.getClass().getName());
} else {
Log.e(TAG, "getApp Exception: application object is null");
}
}
return app;
}
至少它不会崩溃,我可以检查getApp() == null