В консоли разработчика я вижу много сбоев с stacktrace, подобных этому
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)
Метод getApp для BaseActivity -
public App getApp() {
return (App) getApplication();
}
Класс приложения
public class App extends MultiDexApplication { ...
а в теге манифеста приложения содержится ссылка на этот класс
<application
android:name="com.myapp.App"
98% сбоев для Android 7.0, остальное - 7.1. Никаких других версий Android не влияет.
EDIT: я использую proguard, поэтому его можно каким-то образом связать, но сохраняя класс
-keep class com.myapp.** { *;}
-keep interface com.myapp.** { *;}
Примечание. Возможно, это не так, но в тех же версиях Android это выглядит так, как иногда не вызывается метод App onCreate. Я наблюдал это, потому что некоторые объекты, созданные в onCreate, были пустыми, когда к ним обращались из Сервиса (запущенного AlarmManager) или BroadcastReceiver
Есть ли у кого-нибудь идея, что может вызвать его, как его исправить или обойти? Благодаря
ИЗМЕНИТЬ 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