Android HandlerThread、Looper、Handler知識ポイント整理

2722 ワード

続行...
テストdemoコード:
  TestHandlerThreadActivity.java:
package com.example.testandroid;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.HandlerThread;
import android.os.Message;

public class TestHandlerThreadActivity extends Activity {
	HandlerThread handlerThread = new HandlerThread("test");
	Handler handler;

	Handler mMainHandler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.out.println("cur_id=" + Thread.currentThread().getId());

		handlerThread.start();
		System.out.println("handlerThread.id=" + handlerThread.getId());
		// post(runnable),       run(),run() ThreadId UIThread    
		// handler = new Handler();
		// post(runnable), runnable   handlerThread ,   UIThread 
		handler = new Handler(handlerThread.getLooper(), new Callback() {

			@Override
			public boolean handleMessage(Message msg) {
				System.out
						.println("receive Callback message.whatA=" + msg.what);
				if (msg.what == 1) {
					return true;//        
				} else if (msg.what == 3) {
					System.out.println("handlerThread msg thread_id="
							+ Thread.currentThread().getId());
					for (int i = 0; i < 20; i++) {
						try {
							Thread.sleep(1000);
							System.out.printf("    %d 
", i); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return true; } else { return false; // handleMessage() } } }) { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); System.out.println("receive message.whatB=" + msg.what); } }; handler.post(new Runnable() { @Override public void run() { System.out.println("handler_post_cur_id=" + Thread.currentThread().getId()); handler.sendEmptyMessage(1); handler.sendEmptyMessage(2); } }); mMainHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); System.out.println("mMainHandler msg thread_id=" + Thread.currentThread().getId()); } }; mMainHandler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub System.out.println("mMainHandle_post_cur_id=" + Thread.currentThread().getId()); } }); handler.sendEmptyMessage(3); mMainHandler.sendEmptyMessage(1); } }