美文网首页Android学习
Activity之间使用intent传递大数据出现Bug及解决方

Activity之间使用intent传递大数据出现Bug及解决方

作者: 木子里9 | 来源:发表于2016-11-08 17:44 被阅读1518次

            很久很久(大概两个月吧)之前,在项目中遇到了这个问题,就想着要记录一下,然后就拖到了现在。所以本猿(其实人家是媛)得出一个重要推论:不要轻易放弃一个拖延症重患,他想到的一定会做到,只是时间的问题,就是不知道你们等不等的到(此处适合坏笑的表情)。

           当测试找来这个bug的时候,本宝宝一头雾水,没崩,没报啥常规错,只见logcat空余一行:E: !!! FAILED BINDER TRANSACTION !!! (当然是红色)。然后宝宝开始Google,才发现原来是intent传递大容量数据产生的问题,导致新Activity无法启动。问题详细分析请click here

            解决方案,我是采用的静态成员变量方式实现大容量数据传递的(当然也是参考别人的咯,毕竟现在巨人很多,有的是肩膀可站)。具体如下:

    这个可以直接在activity中也可以单独一个数据结构体,就和单例差不多了。

    比如:

    public class DataHolder{

    private static String data;

    public static String getData(){returndata;}

    public static String setData(Stringdata){this.data=data;}

    }

    启动之前设置数据,新的activity获取数据。

    注意:这些情况如果数据很大很多,比如bitmap,处理不当是很容易导致内存泄露或者内存溢出的。

    所以可以考虑使用WeakReferences将数据包装起来。

    比如:

    public class DataHolder{

    Map<String, WeakReference<Object>> data = new HashMap<String, WeakReference>();

    void save(String id,Object object{

    data.put(id,new WeakReference<Object>(object));

    }

    Object retrieve(String id){WeakReference<Object> objectWeakReference=data.get(id);

    return objectWeakReference.get();}

    }

    启动之前:

    DataHolder.getInstance().save(someId,someObject);

    新activity中:

    DataHolder.getInstance().retrieve(someId);

    这里可能需要通过intent传递id,如果数据唯一,id都可以不传递的。save() retrieve()中id都固定即可。

            最后宝宝要声明:问题是自己遇到的,解决方法是别人的。所以宝宝只是小小的搬运工,公德心还是有的,给你们 -->   解决方法连接

    大恩不言谢,所以膝盖什么的就不用送了。

    相关文章

      网友评论

        本文标题:Activity之间使用intent传递大数据出现Bug及解决方

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