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

Android面试常客Handler详解

难度中级
时长 2小时 0分
学习人数
综合评分9.30
169人评价 查看评价
9.7 内容实用
9.3 简洁易懂
8.9 逻辑清晰

最新回答 / 浪漫随风
 mHandler.postDelayed(myRunnable,2000);在onCreate()里面的这个代码,你试试时间给 0,我觉得是这个问题!

最新回答 / 学嗨玩嗨
Ctrl+点击 进不去是你本地没有 需要下载

最新回答 / MyandroidFan
那只有去多看源码,通过源码去理解这些问题了。

最赞回答 / 喜得温词
这是因为你虽然是在子线程中创建的Handler,但是当Handler被创建出来的时候,子线程并没有创建出Looper,而Handler在创建的时候就会与Looper进行绑定(可以去查看源码),所以当你创建出Handler,而子线程没有Looper,所以Handler会与主线程的Looper进行绑定。(因为主线程的Looper在主线程创建出来的时候便也别创建出来)

最新回答 / 这个杀手不太累
可以理解为与UI相关的操作为主线程,执行耗时任务的为子线程

最赞回答 / 慕粉18419213644
handler.postDelayed只是发送一条延时消息到消息队列中,而程序的运行要不断的从消息队列中去取消息,所以第一条消息必须在主线程(UI线程)中加入,后面的更新消息会在子线程中  递归延时发送!

最新回答 / gzzing
<...code...>Thread.sleep()方法会抛出异常所以要try/catch

最新回答 / 慕星北
不是,Handler只是拦截消息并处理,一般我们如果要更新UI信息,可以在主线程中直接更新,但是如果想要实现定时更新,就必然要重启一个线程更新,而在子线程中不能直接对UI进行操作,所以需要通过Message进行消息传递,然后通过Handler去拦截处理,所以不论是在主线程和子线程中它都可以使用,它只负责处理.

最赞回答 / someone_ikok
Android系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列 和一个消息循环(Looper),特定线程的消息只能分发给本线程,不能进行跨线程,跨进程通讯。但是创建的工作线程默认是没有消息循环和消息队列的,如果想让该线程具有消息队列和消息循环,需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用Looper.loop()进入消息循环。一个Message经由Handler的发送,MessageQueue的入队,Looper的抽取,又再一次地...

最赞回答 / 柯文
在Android里可以这么理解,因为在android里你可以把UI界面当做主线程,你不能因为下载东西就一直显示下载,用户体验不好,也不被google容许,所以你点击下载就是开启子线程去下载了,手机页面该看什么你就看什么,等下载好子线程就发个message给handler它来更新UI,在你的手机界面显示或弹出一个下载好了的消息,如果不用handler下载好了你也不知道,还得自己去看。Handler和Thread:子线程是不能更新UI的,所以用Thread开启子线程后,如果需要更新UI,就通过Handler来...
老师告诉你能学到什么?
通过本课程,你将学到: 1、什么是Handler 2、如何使用Handler 3、Handler的原理是什么 4、如何定义一个与线程相关的Handler 5、Android更新UI的几种方式 6、非UI线程真的不能更新UI吗 7、Handler使用过程中遇到的问题

微信扫码,参与3人拼团

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

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

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消