面试复习题-- handler

1、子线程Handler的空消息

Handler 的消息为空时,意味着queue.next()会一直等待,这个时候就会block住,换句话说,这里block住,意味着Lopper一直在这里面等待,run函数一直处于等待状态,run会一直被执行,线程不会销毁,结果内存泄漏,线程一直处于执行状态,所以这时候,我们线程所有的上下文全部都会在内存当中,那么这样自会导致CPU浪费,内存浪费
解决办法:在Looper里面有一个quite(),会调用nativeWake,nativePollOnce是出于等待,nativeWake是唤醒,唤醒之后往下面执行,最后next返回null,loop循环就会退出,Looper就推出,run方法往下执行,接着就会释放内存,把CPU交出去,给别人用。

2、主线程Handler的空消息

简单的优先级实现,用于及时响应系统的高优先级消息,如屏幕刷新。target 为 null 的 Message 即为同步屏障。遇到同步屏障,后续的同步消息都会被抛弃,直到遇到异步消息。

消息队列空闲时(MessageQueue 为空或没到下一个 Message 执行时间)执行的操作,一个 next 循环内最多执行 4 个 IdleHandler。执行时调用 IdleHandler 的 queueIdle 方法,方法返回 false,执行完会将当前 IdleHandler 从队列中移除,为 true 则保留,下次空闲时再执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值