zoukankan      html  css  js  c++  java
  • Handler的简单理解.

    前提:1.耗时的工作不可以在主线程中进行.

      2.Thread子线程不能操作UI界面上的View,会报错.

    这种情况下,Handler这种能操作UI界面的线程就诞生了.

    handler.sendEmptyMessage(0);//发送消息到handler

    handleMessage接受来自sendEmptyMessage的信息并做处理;
    通常用于被重写;
    public void handleMessage(Message msg) {
        switch(msg.what){
        case 0://更细下载进度
          process += 1;
          text.setText("下载" + process + "%");//在主线程中更新UI界面
          break;
        case 1://提示下载完成
          text.setText("下载完成");//在主线程中更新UI界面
          break;
        default:
          break;
        }
      }

    既然有接受消息,那发送消息呢?

    我目前总结了两个方法:
    myHandler.obtainMessage(msg值, data).sendToTarget();//data处可以换位任何对象
    //并在handleMessage中通过构建相应对象来接收data;
    //另一种传递信息的方法--发送空消息,只发送一条消息;
    myHandler.sendEmptyMessage(msg值);



    关于线程的常识:
    • UI线程:就是我们的主线程,系统在创建UI线程的时候会初始化一个Looper对象,同时也会创建一个与其关联的MessageQueue;
    • Handler:作用就是发送与处理信息,如果希望Handler正常工作,在当前线程中要有一个Looper对象
    • Message:Handler接收与处理的消息对象
    • MessageQueue:消息队列,先进先出管理Message,在初始化Looper对象时会创建一个与之关联的MessageQueue;
    • Looper:每个线程只能够有一个Looper,管理MessageQueue,不断地从中取出Message分发给对应的Handler处理!

    
    

     我见过的获取looper的两种方法:

    第一种:

    1 )直接调用Looper.prepare()方法即可为当前线程创建Looper对象,而它的构造器会创建配套的MessageQueue; 

    2 )创建Handler对象,重写handleMessage( )方法就可以处理来自于其他线程的信息了! 

    3 )调用Looper.loop()方法启动Looper

    第二种:

    1)自己做一个继承自Handler的类MyHandler,在其构造方法中设置(looper参数)

    private class MyHandler extends Handler {
            MyHandler(Looper looper) {
                super(looper);
            }
    }

    然后生造一个HandlerThread,构建MyHandler的时候looper参数设为HandlerThread.getlooper();

    HandlerThread:内置了looper的Thread;

    HandlerThread myThread = new HandlerThread("myHandler");
            myThread.start();       
    MyHandler myHandler = new MyHandler(myThread.getLooper());

  • 相关阅读:
    win7最新版下载与密钥 | Win7用户福音:微软集成更新的新版Windows 7镜像泄露
    迅捷PDF编辑器 v2.1.0.1 中文免费版
    解决移动网络无法访问胡萝卜周网站(www.carrotchou.blog)
    vue启动流程
    vue--综合组件间的通信
    网络请求
    vue环境搭建
    vue--路由嵌套
    vue路由高级用法
    vue-router实现组件间的跳转---参数传递
  • 原文地址:https://www.cnblogs.com/Ravenzzz/p/9986381.html
Copyright © 2011-2022 走看看