zoukankan      html  css  js  c++  java
  • handle中传递对象

        最近在做项目中遇到了一个怪事,我解析了一些数据,将这些数据保存到了对象中,而对象实现了序列化接口。然后将这里数据用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");
  • 相关阅读:
    Oracle创建database link(dblink)和同义词(synonym)
    spring boot 集成 quartz 定时任务
    tomcat 启动Spring boot 项目
    UUID+随机数
    js常用字符串处理方法
    Win10安装mysql-8.0.11-winx64详细步骤
    ORA-02049: 超时: 分布式事务处理等待锁
    spring boot 发邮件
    bootstrap table 列求和
    spring boot 延长 Session 时间
  • 原文地址:https://www.cnblogs.com/tanlon/p/2108387.html
Copyright © 2011-2022 走看看