相关疑难解决方法(0)

Android 7.0和7.1 getApplication()ClassCastException

在Developer Console中,我看到很多像这样的堆栈跟踪崩溃

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)
Run Code Online (Sandbox Code Playgroud)

BaseActivity的getApp方法是

public App getApp() {
        return (App) getApplication();
    }
Run Code Online (Sandbox Code Playgroud)

App类是

public class App extends MultiDexApplication { ...
Run Code Online (Sandbox Code Playgroud)

并且在manifest应用程序标记中包含对此类的引用

 <application
        android:name="com.myapp.App"
Run Code Online (Sandbox Code Playgroud)

98%的崩溃是针对Android 7.0,休息是7.1.没有其他Android版本受到影响.

编辑:我使用proguard所以它可以以某种方式相关但保持类

-keep class com.myapp.** { *;}
-keep interface com.myapp.** { *;}
Run Code Online (Sandbox Code Playgroud)

注意:它可能没有关系,但在相同的Android版本中,它看起来像App的onCreate方法有时不被调用.我观察它是因为在onCreate中创建的某些对象在从Service(由AlarmManager启动)或BroadcastReceiver访问时为null

有谁知道什么可以导致它,如何解决它或解决它?谢谢

编辑2:我最终得到了这样的东西:

   public App getApp() …
Run Code Online (Sandbox Code Playgroud)

android android-7.0-nougat android-application-class

25
推荐指数
2
解决办法
1934
查看次数