美文网首页生活
Android笔记-5:intent传递arraylist

Android笔记-5:intent传递arraylist

作者: 周翔_2017 | 来源:发表于2017-08-22 16:48 被阅读0次

    今天遇到一个问题:

    用intent传递一个arraylist<object>,object里面有一个接口对象,当然也继承了Serializable接口。当我把初始化arraylist方法写成静态方法就可以传递,写成成员方法,就无法传递,始终报错。无法序列化。异常如下:

    java.lang.RuntimeException: Parcelable encountered IOException writing serializable object

    我把接口对象改成实体对象后就没有异常了。

    百度许久也不知为何。

    个人感觉是静态方法把对象以及其内的接口对象也序列化了,动态方法却只能序列化该对象和其内的实体对象,其内接口对象并没有序列化。导致异常。(有读者知道具体原因可以留言告诉我。)

    最后只能用静态方法来实现,用广播机制通知后续处理方法。

    后续,补充:

    此问题一直在我脑子里,所以我又在网上搜索关于接口是否可以序列化的问题。终于发现此贴参考此贴,见2楼分析。原来是因为实现接口我用的是内部类的方式。非静态内部类会隐含保存一个指向其外部类实例的引用。序列化估计会有问题。

    后面我将会新建一个非内部类来测试此问题。待续。。。

    后续2:找到原因之后,我果断把接口的实现改为了外部类,经测试果然没有异常了。

    总结:

    1.其实标题的arraylist与本文的核心无关,笔者被网上的一些帖子误导了。文章标题应该改为《intent传递非静态内部类出现java.lang.RuntimeException: Parcelable encountered IOException writing serializable object 的问题》

    2.接口对象也不是重点,重点是非静态内部类

    3.其实我用静态方法初始化时候,内部类是静态的,从而被序列化了。

    4.非静态内部类序列化会出问题,请谨慎使用!!!

    相关文章

      网友评论

        本文标题:Android笔记-5:intent传递arraylist

        本文链接:https://www.haomeiwen.com/subject/funkdxtx.html