- MessageQueue存放Message的物件
- Thread+Looper 取得處理消息的執行緒
- 一個Thread只有一個Looper
- Looper 內幾個重要方法
- myLooper 取得我執行緒目前的Looper
- getMainLooper 取得UI執行緒的Looper
- quit 結束收集
- loop 開始不停的收集資訊給Handler
- prepare 自己建立的執行緒 使用Looper前要使用此方法準備一個Looper
- Message
- 消息的格式 Message 會記錄 用在哪個Handler,同一個Message 物件不可用在不同的Handler
- Handler
- 發送的函數 Handler post sendMessage
MainActivity
public class MainActivity extends AppCompatActivity { MyHandlerThread mHandlerThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Handler myHander = new Handler();
Log.d("MainActivity.myLooper()", Looper.myLooper().toString());
Log.d("MainActivity.MainLooper", Looper.getMainLooper().toString());
Log.d("myHander", myHander.getLooper()+""); } public void start(View view){ TextView textView = (TextView) findViewById(R.id.textView);
mHandlerThread = new MyHandlerThread();
mHandlerThread.textView = textView;
mHandlerThread.start(); } public void sendMsg(View view){ Message msg = new Message();
msg.obj = "Test:"+(Math.random()*1000)%1000;
mHandlerThread.mHandler.sendMessage(msg); } }
public class MyHandlerThread extends Thread { public static final String TAG = "MyHT";
public TextView textView;
public Handler mHandler;
public Handler myHanderUI;
public void run(){ myHanderUI = new Handler(Looper.getMainLooper()){ @Override
public void handleMessage(Message msg) { textView.setText("Msg:"+msg.obj);
super.handleMessage(msg); }
}; Log.d("Howard","MyHandlerThread myHander:"+
myHanderUI.getLooper()); if (Looper.myLooper() == null){ Looper.prepare(); } mHandler = new Handler(Looper.myLooper()){ @Override
public void handleMessage(Message msg) { Message myMsg = new Message();
myMsg.obj = msg.obj;
myHanderUI.sendMessage(myMsg);
Log.d("Howard","handleMessage:"+msg.obj);
super.handleMessage(msg); } }; Looper.loop(); } }
沒有留言:
張貼留言