您的位置:首页 > 产品设计 > UI/UE

Handle的传递机制,Handle Looper MessageQueue的工作原理

2018-03-17 08:50 330 查看
因为只有主线程能修改UI组件,所以主线程又被称作UI线程;但是若只由主线程来修改UI的话,这样会导致新启动的线程无法动态改变UI的属性值或者是进行耗时操作,主线程会被阻塞(ANR异常,系统无法响应输入事件和BroadCast),而子线程又不能修改UI组件,只能在新进程里发出一通消息,这时就需要采用handle的传递机制;
Handle的作用有两个:在新启动的线程发送消息(一般采用sendEmptyMessage);在主线程接受,处理消息(重写handleMessage);
笔记本有原理图;

MessageQueue采用先进先出的方式管理消息,Looper会在其中构造一个Looper对象,MessageQueue是由Looper来管理的,初始化Looper时会创建一个与之相关联的MessageQueue,所以必须保证每个线程都有一个Looper;为了保证当前线程有一个Looper对象,分两种情况:
  1.新创建的线程就是在主线程中,这样就无需创建Looper对象,系统已经自动创建了;
2.新创建的线程是自创的子线程(Thread),这样就需要自己获取Looper对象并启动它;通过调用Looper的prepare()方法即可获取Looper对象,然后在调用Looper的静态方法loop()来启动它;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: