昨天处理一个奇怪的crash,crash的调用栈是这样色的:
Caused by: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = azmo$a) at android.os.Parcel.readSerializable(Parcel.java:2925) at android.os.Parcel.readValue(Parcel.java:2711) at android.os.Parcel.readArrayMapInternal(Parcel.java:3029) at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288) at android.os.BaseBundle.unparcel(BaseBundle.java:232) at android.os.BaseBundle.getInt(BaseBundle.java:1030) at android.content.Intent.getIntExtra(Intent.java:7380) at ***.onHandleWork(***.java:81)
查询了代码,调用栈的起点是在一个JobIntentService,当它在处理Intent, getIntExtra时出现了ClassNotFoundException,而且这个类应该是被混淆了azmo$a,查询build的混淆map.txt,果然没有找到这个类名。
百思不得其解,顺藤摸瓜,仔细的读了下这个JobIntentService,发现唯一一种可能是用户升级时,正好有一个Job在run或准备run,因为升级,app重启了,新版本的app起来后,系统将重启前的Intent再重发给了Serviceÿ