原因:跨进程间使用Bundle传递一个Parcelable对象时出现ClassNotFoundException异常,出现这个异常的原因是因为ClassLoader不对造成的,我们应用中存在两种类加载器它们分别是BootClassLoader和PathClassLoader.
BootClassLoader用来加载系统类,PathClassLoader用来加载我们在应用中自己写的类.所以当类加载器为BootClassLoader时我们要加载自己写的类就会出现ClassNotFound异常.

在进程间通信中Messenger携带bundle传递Parcelable对象,在到达另一个进程后通过bundel取出parcelable对象时出现ClassNotFound异常是因为它通过BootClassLoader来加载我们的Parcelable对象

解决方案:在接收bundle对象后要设置setClassLoader
Bundle bundle= msg.getData();
bundle.setClassLoader(getClass().getClassLoader());
这种一般在同一个进程之间不会出现,不同进程之间容易出现。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐