继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Handler处理机制

米脂
关注TA
已关注
手记 492
粉丝 88
获赞 591

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方法

    直接把数据从子线程抛到主线程

5bb9ca14000183c106040417.jpg

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

5bb9ca14000165a303490187.jpg

    

5bb9ca14000183c106040417.jpg


5bb9ca14000165a303490187.jpg

原文链接:http://www.apkbus.com/blog-832543-61303.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP