已采纳回答 / Swy㏄
handlerThread是子线程的。平时在线程中实例化handler(首先的需要确定线程中包含looper)在线程中创建looper需要在线程的run()方法中先调用looper.prepare()来初始化looper,然后再run()方法后调用looper.loop()方法来死循环 这样就在当前线程中创建好了looper而handlerthread就是更加简单的用来创建线程中的looper
2016-05-22
已采纳回答 / 粗鲁的男人
每一个handler必须要对应一个looper,主线程会自动创建Looper对象,不需要我们手动创建,所以主线程可以直接创建handler。在new handler的时候没有传入指定的looper就会默认绑定当前创建handler的线程的looper,如果没有looper就报错。如果自己开个子线程,那肯定得自己创建looper对象啊,或者用HandlerThread,的getlooper也行。
2016-05-20
最赞回答 / 喜得温词
这是因为你虽然是在子线程中创建的Handler,但是当Handler被创建出来的时候,子线程并没有创建出Looper,而Handler在创建的时候就会与Looper进行绑定(可以去查看源码),所以当你创建出Handler,而子线程没有Looper,所以Handler会与主线程的Looper进行绑定。(因为主线程的Looper在主线程创建出来的时候便也别创建出来)
2016-04-22