app暂停一段时间后会导致ClassNotFoundException的原因是什么?

时间:2013-11-19 23:02:35

标签: android proguard serializable

我们收到的崩溃报告如下:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {com.zigzagworld.icjl.tanachbible / com.zigzagworld.icjl.tanachbible.ViewTextActivity}:java.lang.RuntimeException:Parcelable visitedClassNotFoundException读取Serializable对象(name = com .zigzagworld.icjl.tanachtext.w)
  在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1951)
  在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1972)
  在android.app.ActivityThread.access $ 1500(ActivityThread.java:148)
  在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1048)
  在android.os.Handler.dispatchMessage(Handler.java:99)
  在android.os.Looper.loop(Looper.java:150)
  在android.app.ActivityThread.main(ActivityThread.java:4419)
  at java.lang.reflect.Method.invokeNative(Native Method)
  在java.lang.reflect.Method.invoke(Method.java:507)
  在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:846)
  在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)
  at dalvik.system.NativeStart.main(Native Method)
    。 。 。其他几个“引起”痕迹,结尾于:
  引起:java.lang.ClassNotFoundException:com.zigzagworld.icjl.tanachtext.w在loader dalvik.system.PathClassLoader [。]中   在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
  在java.lang.ClassLoader.loadClass(ClassLoader.java:551)
  在java.lang.ClassLoader.loadClass(ClassLoader.java:511)

在至少一个报告中,用户添加了一条消息,指示只有在应用程序暂停了很长时间后返回应用程序时才会发生崩溃。

从ProGuard的映射文件中,我很确定装载程序找不到哪个类。它是一个扩展java.lang.Object并实现Serializable的实用程序类;我为onPause调用ViewTextActivity时序列化对象实例(Android在崩溃时尝试启动)。

如果应用程序在短时间内被推到后台,似乎没有任何问题。基于这些症状,我猜这个场景是:

  1. 用户启动ViewTextActivity
  2. 用户按Home键,接听电话或执行将应用推送到后台的其他操作
  3. 应用程序在后台保留足够长的时间,系统会终止活动和/或回收资源的过程
  4. 用户最终返回到应用程序,此时框架会尝试重新创建活动,但当它尝试读取活动暂停时保存的Bundle时,它会失败。
  5. 在卸载对象的类时,是否存在读取序列化对象的已知问题?还有什么我应该看的吗?是否存在某种ProGuard问题?我认为已发布的应用程序是使用Android SDK工具版本构建的,该版本刚好在当前版本(22.3)之前。

    我应该提一下,我们还没有能够在我们自己的测试设备上重现这个问题。

0 个答案:

没有答案