(一百一十一)測試handler的歸屬權
阿新 • • 發佈:2018-12-22
1.問題
最近在想handler訊息處理是委託給looper所屬的執行緒,那麼handler自身建立的各類物件是歸屬誰的呢?
2.demo
demo:jiatai demo
package com.example.demo_111_handleiswhose; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.util.Log; public class MainActivity extends AppCompatActivity { private static final String TAG = "handlertest"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); HandlerThread handlerThread = new HandlerThread("jiataitest"); handlerThread.start(); Handler handler = new MyHandler(handlerThread.getLooper()); handler.sendEmptyMessage(1); } private class MyHandler extends Handler{ MyHandler(Looper looper){ super(looper); Log.d(TAG, "MyHandler constructor"); printThread(); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); Log.d(TAG, "MyHandler handleMessage"); printThread(); } public void printThread(){ Log.d(TAG, "the thread is " + Thread.currentThread().toString()); } } }
3.除錯結果及總結
12-08 11:20:37.410 3845-3845/? D/handlertest: MyHandler constructor
the thread is Thread[main,5,main]
12-08 11:20:37.410 3845-3875/? D/handlertest: MyHandler handleMessage
the thread is Thread[jiataitest,5,main]
建構函式裡跑的執行緒自然還是建立者,handleMessage跑的才是looper歸屬的執行緒。看起來是理所當然的,但是除錯一下更放心一些。