一.介紹
HandlerThread繼承自Thread,當線程開啓時,也就是它run方法運行起來後,
線程同時創建了一個含有消息隊列的Looper,並對外提供自己這個Looper對象的get方法,這就是它和普通Thread唯一不同的地方。
二.好處
爲什麼要使用HandlerThread。
1.開發中如果多次使用類似new Thread(){...}.start()
這種方式開啓一個子線程,會創建多個匿名線程,使得程序運行起來越來越慢,
而HandlerThread自帶Looper使他可以通過消息來多次重複使用當前線程,節省開支;
2.android系統提供的Handler類內部的Looper默認綁定的是UI線程的消息隊列,
對於非UI線程又想使用消息機制,那麼HandlerThread內部的Looper是最合適的,它不會干擾或阻塞UI線程。
三.用法
HandlerThread既然本質是Thread,爲何前面加了一個Handler?
android中Handler類本質上就是從它內部的Looper中不斷取消息,
然後觸發它內部的Callback接口的handleMessage方法,讓用戶去實現對消息的具體處理。
而HandlerThread本身自帶Looper,只要它實現了Callback接口,
那麼HandlerThread也可以在自己線程內處理自己線程發出的消息,
充分實現非UI線程中較低開支下的消息處理。
四.代碼示例
MyHandlerThread myHandler = new MyHandlerThread("lsk"); myHandler.setPriority(Thread.MIN_PRIORITY); myHandler.start(); Handler handler = new Handler(myHandler.getLooper(), myHandler); class MyHandlerThread extends HandlerThread implements Callback { public MyHandlerThread(String name) { super(name); } @Override public boolean handleMessage(Message msg) { } }