代码改变世界

handle中传递对象

  雪夜&流星  阅读(3173)  评论(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");
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示