最赞回答 / 柯文
在Android里可以这么理解,因为在android里你可以把UI界面当做主线程,你不能因为下载东西就一直显示下载,用户体验不好,也不被google容许,所以你点击下载就是开启子线程去下载了,手机页面该看什么你就看什么,等下载好子线程就发个message给handler它来更新UI,在你的手机界面显示或弹出一个下载好了的消息,如果不用handler下载好了你也不知道,还得自己去看。Handler和Thread:子线程是不能更新UI的,所以用Thread开启子线程后,如果需要更新UI,就通过Handler来...
2016-03-10
已采纳回答 / yjblyl
我的理解是:Looper只是一个轮询器,它不断轮询messageQueue里面是否有消息,没有消息则处于等待状态,如果有消息,就从messageQueue抽取消息,交给Handler去处理。真正处理消息的是Handlerl对象里面的handlerMessage()方法。
2016-03-04
最新回答 / Jannina
这个跟message有什么关系?looper实例都还没有,哪里来的Message? @Override public void run() { mTid = Process.myTid(); Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); } Process.setTh...
2016-03-03
已采纳回答 / Jannina
我解释下过程吧:在oncreate中的handler.postDelayed(myRunnable, 1000);为1秒后执行传入的myRunnable中的run方法。。。1秒过去了,然后进入了run()开始更换了图片,又遇到handler.postDelayed(myRunnable, 1000),然后再等1秒,执行本身的run(),像一层一层深入的感觉。
2016-02-26
最新回答 / lingxi
前提得是你在create里面用findviewbyid找到TextVeiw,你要用变量名调用setText啊 不是用变量类型。即TextView a; a=(TextView)findViewById(...);然后a.setText(...)
2016-01-28
最新回答 / wendyyyy
一次是在主线程中,把myRunable添加到主线程消息队列中,调用以后才能执行myRunable中的代码;另一次是在myRunable中,用来实现循环添加自身到主线程消息队列(递归),从而实现每隔一秒更新UI。
2016-01-12
最赞回答 / 北国VS飘雪
UI中第一次调用后,而后在MyRunnable中handler.postDelayed(MyRunnable,1000),一直循环调用MyRunnable的run方法,递归调用
2015-12-28
已采纳回答 / 不逃课
myThread.handler为空,所以在myThread.start();后面添加Thread.sleep(500);休眠半秒钟 让myThread.handler在run中创建,保证myThread.handler不为空
2015-12-02