handler缺点:如果要运送两种类型的数据(比如一个Bitmap,一个Object)就不能运送,但可以用Bunder来传输
 *    使用handler的步骤:
 *    1、创建一个handler
 *    2、在需要用到数据传输的地方通过handler得到message对象,通过message携带要传输的数据
 *    3、直接通过handler发送消息到主线程
 *    4、在主线中通过重写handlerMessage,接收传输过来的数据
如果在onCreate启动的子线程做的操作不耗时,这个时候操作控件,错误是存在的,只是没有检测出来,因为这个时候控件还没来得及绘制
子线程向主线程传送消息
    程序步骤:
    1、发送一个空消息(不用构造message对象,而是直接给一个消息标记)
        handler.sendEmptyMessage(1);
    2、发送一个带message的信息
        //1.通过Handler得到一个信息
        Message message = handler.obtainMessage();
    // Message message2 = Message.obtain();
        //2.通过这个信息,携带数据
        message.obj = "" ;    //用来传输复杂数据
        message.arg1 = 100;  //用来传输简单整数类型
        message.arg2 = 200;  //用来传输简单整数类型
        message.what = 300;  //一般用来给message打标记的,因为一般可以传多个message
        //3.利用handler发送消息,从子线程发送到主线程
        handler.sendMessage(message);
        //发送延迟消息
        //handler.sendMessageDelayed(message, 3000);        //隔3秒后再发送消息
        //handler.sendEmptyMessageDelayed(5, 3000);
主线程向子线程传送消息
    步骤与上面类似。
    在接收数据的地方new Handler(){} 并重写方法
    在发送数据的地方sendMessage()
     不一样的地方:
        在接收数据的地方,要写Looper.prepare();   //相当于初始化looper对象
                                               Looper.loop();        //循环
   总结:如果在主线程中接收消息,就不用写Looper,因为主线程中自带有一个Looper对象,并且也在循环工作;
              但在子线程中没有looper对象,所以必须我们自己去创建,并且让它循环。所以,在子线程中接收数据之
              前要先调用Looper.prepare()方法,再调用Looper.loop()方法
    //子线程中只要有了looper对象,就可以写吐司。主线程中自带有looper对象,所以可以直接写吐司。
    //如果把吐司写到Looper.prepare();之前就会报错。
 
图片的循环播放 开启一个子线程,做一个死循环
    注意:在子线程中延迟发送要用Thread.sleep()方法,不能用handler.sendMessageDelayed(message, 2000);
              因为子线程一旦启动了,就会一直进行,所以效果就是只有第一次会延迟发送消息,后面的就不会了,就会
              一直发送。而在主线程中就可以使用handler.sendMessageDelayed(message, 2000);来延迟发送
 
主线程向主线程传送消息

    方法类似。。。
 
Handler中的post方法
    直接把数据从子线程抛到主线程

    实际上,每一个空间也有post方法,如下:

    

最新文章

  1. [Erlang 0107] Erlang实现文本截断
  2. dictionaryWithObjectsAndKeys
  3. (旧)子数涵数·PS——替换颜色
  4. Android IOS WebRTC 音视频开发总结(三九)-- win10升级为何要p2p
  5. Java常见排序算法之冒泡排序
  6. 399. Evaluate Division
  7. Android中解析XML的方法
  8. 验证身份证合法性的js
  9. Sesson禁止使用Cookie
  10. string数组转化成int数组
  11. SVN本地服务器的搭建
  12. 使用javac编译zookeeper项目
  13. BaseServlet,让一个servlet处理多个请求
  14. mysql实现高可用架构之MHA
  15. centos6.5下 hdp-2.4.2安装
  16. (七十一)关于UITableView退出崩溃的问题和滚动到底部的方法
  17. 支持老版本IE的3种解决方案
  18. phpcms V9 二次开发------(获取点击数详解)
  19. oracle入坑日记<四>表空间
  20. 解决win10系统无法安装.NET Framework 3.5

热门文章

  1. poj 3050 地图5位数问题 dfs算法
  2. Post页面爬取失败__编码问题
  3. Python虚拟机函数机制之位置参数(四)
  4. Python虚拟机之while循环控制结构(三)
  5. 【LVS】简介与说明
  6. tarjan - tarjan的几种用法
  7. 聊聊、Highcharts 动态数据
  8. 如何在 Rails 中搭配 Turbolinks 使用 Vue
  9. AWK 用法
  10. TypeToken获取运行时泛型类型