代码改变世界

handle中传递对象

2011-07-16 20:38  雪夜&流星  阅读(3168)  评论(0编辑  收藏  举报

    最近在做项目中遇到了一个怪事,我解析了一些数据,将这些数据保存到了对象中,而对象实现了序列化接口。然后将这里数据用Arraylist保存并且通过handler传递出去,我是一部分一部分的往外传递的,在传递完成一部分之后就将Arraylist里面的数据给clear了,结果发现handler那边接受的的数据为空。但是当我数据量比较大的时候使用这个方法就不存在这个问题。

   后来改用了将数据克隆出来然后传递出去就没问题了,因为保存对象的数据是经过序列化了的,用handler传递的数据的时候传递的只是他的内存地址,传递数据和接收数据对象其实是共享内存地址的,当我使用handler.sendMessage(message)方法之后立马调用Arraylist.clear()的时候数据被我立马清空了,handler那边还没来得及处理,就会造成handler接受的数据是空的现象。那又为什么会出现当我数据量比较大的时候使用这样的方法会没有问题呢?据猜测这个地方可能是由于线程不同步造成的。

   android 通过handler传递对象:

Bundle bundle=new Bundle();
bundle.putInt(
"id", 10);
bundle.putSerializable(
"list",(ArrayList<Entity>)obj);//注意这里的Entity必须是实现了序列化接口的对象
Message message
=handler.obtainMessage(1, bundle);
handler.sendMessage(message);

  handler中接受数据:

Bundle bundle2=(Bundle) msg.obj;
ArrayList
<Entity> list2=(ArrayList<Entity>) bundle2.get("list");