8

我已经看过很多关于 ClassNotFoundException 和 Android 的帖子,但我还没有找到我认为是我所经历的原因。

我在 Android 市场上有一个应用程序 -数据计数器小部件。它有 250k+ 的下载量,每次我发布一个新版本时,我都会在 Android Market 的开发者控制台中收到少量 (1-5) 份关于 ClassNotFoundException 的错误报告。

29 份报告来自未指定(“其他”)设备,而 2 份来自 Nexus One。有两条用户消息:“启动时崩溃”和“更新安装期间”。

所有报告都是关于我的接收器(扩展广播接收器)。其中一个接收器相对频繁地被触发,因为它是启动读取和存储 Android 设备数据使用情况的服务的接收器。我有这种感觉,可能是为接收器设置了警报(使用 AlarmManager),然后用户/设备升级了应用程序并且找不到该类 - 可能是因为它位于不同的物理包中,或者它发生在设备进行交换的那一刻。会是这样吗?如果是这样,有没有办法解决它?我不明白为什么几乎所有的报告(比如 90%)都是在新版本发布后的同一天或接下来几天出现的。

我的一个接收器的堆栈跟踪(其他接收器除了类名之外提供相同的堆栈跟踪):

java.lang.RuntimeException: Unable to instantiate receiver com.roysolberg.android.datacounter.receivers.CounterReceiver: java.lang.ClassNotFoundException: com.roysolberg.android.datacounter.receivers.CounterReceiver in loader dalvik.system.PathClassLoader[/data/app/com.roysolberg.android.datacounter-1.apk]
 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2789)
 at android.app.ActivityThread.access$3200(ActivityThread.java:125)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:123)
 at android.app.ActivityThread.main(ActivityThread.java:4627)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:521)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.roysolberg.android.datacounter.receivers.CounterReceiver in loader dalvik.system.PathClassLoader[/data/app/com.roysolberg.android.datacounter-1.apk]
 at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
 at android.app.ActivityThread.handleReceiver(ActivityThread.java:2780)
 ... 10 more
4

2 回答 2

2

一年左右更新我的应用程序后,我现在明白了这个问题,但似乎没有解决方案:

我的应用程序(取决于用户设置)使用警报管理器定期运行特定任务。当应用程序更新时,它会在短时间内不可用,如果触发警报,则会导致该特定问题!然后该应用程序再次可用,一切正常。

所以我每次更新我的应用程序时都会定期收到这份 FC 报告,对此我无能为力。

现在在 FC 报告消息中,我有时会看到“更新时崩溃”......确认。

同样关于迁移到 SD,我特别阻止它出现在清单文件中,但市场上的一些应用程序允许强制移动应用程序。因此,如果您使用小部件或警报,您肯定也可以收到此类报告!

于 2012-04-25T05:17:43.413 回答
1

假设,这个问题非常类似于Android 应用程序无法在 PathClassLoader 中的某些手机上加载

于 2011-04-24T08:52:44.177 回答