• Handler处理机制


    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方法,如下:

        
  • 相关阅读:
    spring学习之模拟spring(spring原理解析)-01.xml文件的解析
    存储过程学习
    对象的深浅拷贝
    JavaScript 面向对象编程思想(二)
    深层剖析JavaScript 一
    深入剖析 css
    Vuex 总结
    h5 微信授权
    LeetCode
    echarts-liquidfill
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5735442.html
Copyright © 2020-2023  润新知