-
HandlerThread 1. Handler在创建的时候可以指定Looper,这样通过Handler的sendMessage()方法发送出去的消息就会添加到指定Looper里面的MessageQueue里面去。在不指定Looper的情况下,Handler绑定的是创建它的线程的Looper。 如果这个线程的Looper不存在,程序将抛出"Can't create handler inside thread that has not called Looper.prepare()"。 2. HandlerThread继承于Thread,所以它本质就是个Thread。与普通Thread的差别就在于,它有个Looper成员变量。 在其run()方法中,调用Looper.myLooper()获得一个looper对象。 synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); 在创建handler时使用getLooper()方法,其实现其实是一直等待looper对象的获得。 while (isAlive() && mLooper == null) { try { wait(); } } 3. HandlerThread的用处 创建Handler的时指定的looper,可以是别的线程创建的。所以Handler中MessageQueue的轮询不一定非要是创建Handler的线程进行,还可以在别的线程中进行。 这个时候我们就需要使用HandlerThread这个类来创建这个Looper了,这样消息的处理就在新创建的HandlerThread中进行。(如图) mThread = new HandlerThread("Handler Thread"); mHandler = new Handler(mThread.getLooper()){ public void handleMessage(android.os.Message msg) { ... }; };查看全部
-
主线程和子线程之间如何相互通信: 1. 子线程向主线程发送消息,是通过调用主线程的Handler,发送信息给主线程的Looper,该Hnadler绑定了主线程的Looper。 2. 主线程向子线程发送消息,是通过调用子线程的Handler,发送信息给子线程的Looper,因此必须有子线程的Looper,为了防止Looper没有初始化,所以通过HandlerThread类,来保证子线程的Looper再被主线程调用时已经初始化。查看全部
-
子线程与主线程之间的相互通信 1.子线程通过 HandlerThread的thread.getLooper()绑定, 2.在主线程的handler的handlerMessage中调用threadHandler.sendMessageDelay(msg,1000);向子线程发送消息。 3.在子线程中通过handler.sendMessageDelay(msg,1000);向主线程发送消息 4.在一个启动点btn调用主线程的handler.sendEmptyMessage(int x); 5.在一个结束点btn调用handler.removeMessages(x);查看全部
-
1.handler是什么? (1)handler是android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息; (2)目的:更新UI,处理、发送消息。 2.为什么要用handler? 是因为android在设计的时候,就封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就没有办法更新UI信息,就会抛出异常信息查看全部
-
handler:一套用来更新UI的机制,也是一套用来做消息处理的机制。查看全部
-
MVC框架解析handler: 会议中要小便<br> view: handler 小便需求人<br> Controller: looper 老板(messageQueue隐藏在其中)<br> model:message、(messageQueue隐藏在looper中咱们不能交互) android中更新UI的几种方式:<br> 1; Activity runOnUiThread();<br> 2、3:Handler post();\sendMessage();<br> 4: View post(); (通过ViewRootImpl.getRunQueue().post(action);方法实现)查看全部
-
Handler与Looper、MessageQueue的关系(原理) 1. Handler机制? 只要遵循Android使用handler来更新UI的机制,我们就不用关心多线程的问题,所有的更新UI的操作都是在主线程的消息队列中去轮询处理的。(如图) 2. Handler封装了消息的发送 (1)handler获取一个message handler.obtainMessage(); obtainMessage()的源码: public final Message obtainMessage() { return Message.obtain(this); //这里this本身就是handler对象 } Message.obtain()的源码: public static Message obtain(Handler h) { Message m = obtain(); m.target = h; //m.target就是Message的目的地,将handler本身赋给它,就说明目的地就是handler本身 return m; } 3. Looper (1)Looper作为一个消息封装的载体,包含了一个消息队列messageQueue,所有的Handler发送的消息都经过这个消息队列——要发送的消息会往这个消息队列中插入或移除。 (2)Looper.loop()方法是一个死循环,不断轮询messageQueue,如果有消息存在取出并发送给handler,然后handler处理消息,没有就阻塞 4. Handler 内部会和Looper进行关联,也就是说在Handler内部可以找到Looper,找到了Looper也就找到了MessageQueue。调用handler.sendMessage()就是向消息队列中发送消息;然后Looper轮询MessageQueue,将message发送给Handler本身进行处理。 5. MessageQueue 一个消息队列,可以添加消息,并处理消息 6. 总结: handler负责发送消息,Looper负责接收Hnandler发送的消息,并直接把消息回传给hanlder自己。MessageQueue是一个存储消息的容器。查看全部
-
onCreate()中调用是为了可以开始换图片,或者说为了开启循环。run()里面调用,是为了自己不断启动,即循环查看全部
-
Handler与Looper、MessageQueue的关系(原理) 1. Handler机制? 只要遵循Android使用handler来更新UI的机制,我们就不用关心多线程的问题,所有的更新UI的操作都是在主线程的消息队列中去轮询处理的。(如图) 2. Handler封装了消息的发送 (1)handler获取一个message handler.obtainMessage(); obtainMessage()的源码: public final Message obtainMessage() { return Message.obtain(this); //这里this本身就是handler对象 } Message.obtain()的源码: public static Message obtain(Handler h) { Message m = obtain(); m.target = h; //m.target就是Message的目的地,将handler本身赋给它,就说明目的地就是handler本身 return m; } 3. Looper (1)Looper作为一个消息封装的载体,包含了一个消息队列messageQueue,所有的Handler发送的消息都经过这个消息队列——要发送的消息会往这个消息队列中插入或移除。 (2)Looper.loop()方法是一个死循环,不断轮询messageQueue,如果有消息存在取出并发送给handler,然后handler处理消息,没有就阻塞 4. Handler 内部会和Looper进行关联,也就是说在Handler内部可以找到Looper,找到了Looper也就找到了MessageQueue。调用handler.sendMessage()就是向消息队列中发送消息;然后Looper轮询MessageQueue,将message发送给Handler本身进行处理。 5. MessageQueue 一个消息队列,可以添加消息,并处理消息 6. 总结: handler负责发送消息,Looper负责接收Hnandler发送的消息,并直接把消息回传给hanlder自己。MessageQueue是一个存储消息的容器。查看全部
-
一、Handler基础知识 1.handler是什么? (1)handler是android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息; (2)目的:更新UI,处理、发送消息。 2.为什么要用handler? 是因为android在设计的时候,就封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就没有办法更新UI信息,就会抛出异常信息查看全部
-
http://www.2cto.com/kf/201401/272073.html查看全部
-
com.android.context 的上下文的情况,以及安卓系统机制。查看全部
-
handler代码1查看全部
-
Handler常识: 1:handler是什么? (1)handler是android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息; (2)目的作用:更新UI,处理、发送消息 2.为什么要用handler 是因为android在设计的时候,就封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就会抛出异常信息,没有办法更新UI信息。查看全部
-
handler postdelayed查看全部
举报
0/150
提交
取消