学徒浅析Android——从HandlerThread谈myLooper()和getMainLooper()

最近在一次线程扫描时,发现项目创建的大量HandlerThread都没有去执行手动释放操作。这也引起了我的好奇,虽然可以依赖垃圾回收机制,但我们也一直被灌输一种思想,垃圾回收不是实时的,Handler是容易内存泄漏的。所以你知道要去调用remove,要去配置弱引用。但当我们使用HandlerThread时,似乎因为它在主线程之外就不再顾虑,那真的是这样吗?围绕这个问题,就需要探讨两个基本问题:

1、为什么要执行HandlerThread#start()

2、myLooper和getMainLooper()有什么区别

 

1、为什么要执行HandlerThread#start()

HandlerThread可以和ActivityThread比较着看,其实就是子线程和主线程之分,我们常说的UI线程就是ActivityThread。从继承关系上看,HandlerThread确实是一个Thread,我们创建了一个HandlerThread,相当于new了一个Thread,只要run()完了就可以被回收。但是,它毕竟叫HanderThread,而不是叫MyThread。可以看下源码里它持有的全局变量有哪些:

学徒浅析Android——从HandlerThread谈myLooper()和getMainLooper()_第1张图片

它有一个Looper对象,还有一个Handle

你可能感兴趣的:(Android开发,android,Looper,myLooper,mainLooper)