Handler复习2

34 阅读1分钟

为何主线程可以new Handler?

答:Looper必须先prepare. 调用了prepare进行初始化之后,必须再调用loop()函数。 主线程在一启动时候,在ActivityThread.java的main方法里由系统帮我们调用了prepare和loop.

如果想要在子线程里new Handler,需要做什么准备?

答:要先进行调用Looper.preapare和loop方法。

子线程中维护的LOOPER.消息队列无消息的时候处理的方案是什么?有什么用?

答:我们需要调用Looper.quit()方法。这个方法会调用Looper.queitesatly()调用之后会释放内存。因为这个方法里面是调用了messagequeue的removeAllmessage方法,把所有的消息都给移除。 用处:1.释放内存 2.释放线程。

既然存在多个Handler往MessageQueue中添加数据(发消息时候各个Handler可能处于不同的线程中),那它是如何确保线程安全的?

答:MessageQueue存和取都采用了锁sychronized.

Handler delay的消失,时间准确吗?

答:不准确。因为加锁了。

sychronized可以修饰什么?

答:修饰方法,修饰静态方法,修复代码块(object) 代码块(this)

我们使用Message时候如何创建他

答:使用obtain.享元设计模式。什么是享元设计模式呢,就是比如我们创建bitmap。申请了一块内存,我们使用完bitmap之后,把bitmap标记为擦除。下一次再使用的时候,bitmap就会使用这块内存空间。