三星设备出现奇怪的崩溃问题

6

在三星手机,尤其是Galaxy S7 Edge上,我们注意到了一种奇怪的异常,这在Fabric崩溃报告中得以体现:

Fatal Exception: java.lang.RuntimeException: Unable to instantiate receiver com.someapp: java.lang.ClassNotFoundException: Didn't find class "com.someapp" on path: DexPathList[[zip file "/data/app/com.someapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.someapp-1/lib/arm, /system/fake-libs, /data/app/com.someapp-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
   at android.app.ActivityThread.handleReceiver(ActivityThread.java:3331)
   at android.app.ActivityThread.-wrap20(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1734)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6688)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

Caused by java.lang.ClassNotFoundException: Didn't find class "com.someapp" on path: DexPathList[[zip file "/data/app/com.someapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.someapp-1/lib/arm, /system/fake-libs, /data/app/com.someapp-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]
   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
   at android.app.ActivityThread.handleReceiver(ActivityThread.java:3326)
   at android.app.ActivityThread.-wrap20(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1734)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6688)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

根据用户反馈,只有在应用程序在后台且没有与之交互时才会出现此错误,我认为问题在于三星设备rom尝试最小化后台任务或将它们放入特殊内存的方式,而我们的应用程序没有准备好,这就发生了。

关键在于异常没有指向任何应用程序的类,所以我们无法追踪问题。如果有人之前遇到过这个问题,请帮忙!


https://dev59.com/h1wX5IYBdhLWcg3w2Sdr - IntelliJ Amiya
1
你在应用程序中启用了Multidex吗? - Manohar
是的,它已启用,但这与multidex无关,至少我认为不是。 - Rez
@eduyayo 感谢您的评论,但它与Json反序列化没有任何关联,它是在应用程序什么也不做的情况下发生的后台操作。 - Rez
你能发布清单吗? - Pablo Baxter
显示剩余12条评论
2个回答

0

Marshmallow 开始,Google 推出了一个名为 Doze 的新功能/模式。根据官方文件

从 Android 6.0(API 级别 23)开始,Android 引入了两个节电功能,通过管理设备未连接到电源时应用程序的行为来延长用户的电池寿命。当设备长时间未使用时,Doze 通过推迟应用程序的后台 CPU 和网络活动来减少电池消耗。App Standby 推迟与用户最近未互动的应用程序的后台网络活动。

您可以在此处详细阅读。

Nougat 中,它已经更加优化。

我认为问题实际上是由于 Doze 功能引起的。我不知道是否有任何方法可以防止这种情况,但您可以手动执行。您可以参考 这里这里 以获取更多详细信息。


恐怕这是事实,因为这只发生在三星手机上,尤其是S7 Edge。 - Rez

0

试试这个...在我遇到不同设备上相同问题时,它对我有效。

compile 'com.android.support:multidex:1.0.1'添加到您的依赖项中。

确保在defaultConfig中设置multiDexEnabled true

然后在您的Application类中添加以下内容

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接