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

Android面试常客Handler详解

难度中级
时长 2小时 0分
学习人数
综合评分9.30
169人评价 查看评价
9.7 内容实用
9.3 简洁易懂
8.9 逻辑清晰
  • 这里复写的tostring方法在打印的时候体现了出来
    查看全部
  • 在此处的线程里的内容 是隔一段时间就handler一个,在handler的里再次调用这个线程,所以形成了循环调用 的结果
    查看全部
  • 图解handler looper message messagequeen的关系
    查看全部
  • handler总结:<br> 1.不能直接在非UI线程直接更新UI(大多数时候)。<br> 2.每次创建Handler时需要给它绑定一个looper,如果是主线程不给定具体的looper则会绑定默认的looper。<br> 3.子线程运行时一定要调用start()方法。<br> 4.在某些特殊情况下在非UI线程是可以更新UI的//不推荐使用(当刚启动Activity即onCreate里面此时onResume方法还没有执行的时候可以,因为在线程中更新UI时会调用ViewParent.invalidateChild()方法检查当前的Thread是否是UIThread,若为UIThread则可以更新(ViewParent是一个接口类,其实现是ViewRootImpl;invalidateChild()方法调用checkThread()方法来检查线程是否为主线程)。ViewRootImp是在onResume方法中初始化的,所以只要在ViewRootImpl创建之前更新UI(在onCreate方法中创建线程并执行,此时还没有初始化ViewRootImp),就可以逃避掉checkThread()的检查进而更新UI。)<br> 5.更新UI的四种方式:<br> a>使用handler.post方法<br> b>使用handler.sendMessage方法,用hanleMessage方法更新UI。<br> c>用runOnUiThread方法。<br> d>使用view.post方法。<br> 6.HnadlerThread本质是子线程,在创建子线程的handler时绑定的是handlerThread对象的getLooper()。
    查看全部
  • 在非UI线程中是可以更新Ui的(在onCreate中创建新线程更新UI): 当刚启动Activity即onCreate里面此时onResume方法还没有执行的时候可以,因为在线程中更新UI时会调用ViewParent.invalidateChild()方法检查当前的Thread是否是UIThread,若为UIThread则可以更新(ViewParent是一个接口类,其实现是ViewRootImpl;invalidateChild()方法调用checkThread()方法来检查线程是否为主线程)。ViewRootImp是在onResume方法中初始化的,所以只要在ViewRootImpl创建之前更新UI(在onCreate方法中创建线程并执行,此时还没有初始化ViewRootImp),就可以逃避掉checkThread()的检查进而更新UI。
    查看全部
  • 更新UI的4种方式(其实内部都是handler机制): 1.通过Handler的post方法(); 2.调用Handler.sendMessage()或Handler.sendEmptyMessage()方法,传统的方法 3.重写Activity中的runOnUIThread方法更新; 4.调用View自身的post(Runnable run)方法更新;
    查看全部
  • 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对象。 3. HandlerThread的用处 创建Handler时指定的looper,也可以是别的线程创建的。所以Handler中MessageQueue的轮询不一定非要在创建Handler的线程进行,还可以在别的线程中进行。 这个时候我们就需要使用HandlerThread这个类的Looper,这样消息的处理就在新创建的HandlerThread中进行。模拟异步处理,主线程给子线程发送消息,在子线程中处理比较耗时的操作。 mThread = new HandlerThread("Handler Thread");//为新创建的线程指定一个名字,HandlerThread线程独有 mHandler = new Handler(mThread.getLooper()){ public void handleMessage(android.os.Message msg) {... }; };
    查看全部
  • 总结..
    查看全部
  • handler的原理,和looper、messageQueen之间的关系
    查看全部
  • 为什么android要设计只能通过handler机制更新ui?
    查看全部
  • ...
    查看全部
  • 使用callback截获handler发送过来的消息,如果将第一个handlerMessage中截获到匹配的消息,设置返回值为true,则不会再执行后面的void handleMessage方法。
    查看全部
  • handler是android给我们提供用来更新ui的一套机制,也是一套消息处理的机制,我们可以发送消息,也可以通过它处理消息。
    查看全部
    0 采集 收起 来源:Handler是什么

    2016-07-28

  • handler得到消息后执行handleMessage(android.os.Message msg)
    查看全部
  • handler得到消息后执行public void handleMessage(android.os.Message msg)
    查看全部

举报

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

微信扫码,参与3人拼团

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

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