为了账号安全,请及时绑定邮箱和手机立即绑定

Android面试常客Handler详解

难度中级
时长 2小时 0分
学习人数
综合评分9.30
169人评价 查看评价
9.7 内容实用
9.3 简洁易懂
8.9 逻辑清晰
  • 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信息,就会抛出异常信息
    查看全部
    0 采集 收起 来源:Handler是什么

    2015-11-05

  • 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信息,就会抛出异常信息
    查看全部
    0 采集 收起 来源:Handler是什么

    2015-10-31

  • http://www.2cto.com/kf/201401/272073.html
    查看全部
    0 采集 收起 来源:课程内容介绍

    2015-10-30

  • com.android.context 的上下文的情况,以及安卓系统机制。
    查看全部
    0 采集 收起 来源:课程内容介绍

    2015-10-30

  • handler代码1
    查看全部
  • Handler常识: 1:handler是什么? (1)handler是android给我们提供用来更新UI的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息; (2)目的作用:更新UI,处理、发送消息 2.为什么要用handler 是因为android在设计的时候,就封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就会抛出异常信息,没有办法更新UI信息。
    查看全部
    0 采集 收起 来源:Handler是什么

    2015-10-28

  • handler postdelayed
    查看全部

举报

0/150
提交
取消
老师告诉你能学到什么?
通过本课程,你将学到: 1、什么是Handler 2、如何使用Handler 3、Handler的原理是什么 4、如何定义一个与线程相关的Handler 5、Android更新UI的几种方式 6、非UI线程真的不能更新UI吗 7、Handler使用过程中遇到的问题

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!