1. 程式人生 > >Android分析主執行緒與子執行緒,以及子執行緒之間相互通訊

Android分析主執行緒與子執行緒,以及子執行緒之間相互通訊

package com.example.testactivity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	public Handler handlerTwo;
	public Handler handlerOne;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
	}
	private void init() {
		findViewById(R.id.id_btnOne).setOnClickListener(this);
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	@Override
	public void onClick(View arg0) {
		switch (arg0.getId()) {
		case R.id.id_btnOne:
			startThreadOne();
			startThreadTwo();
			break;
		default:
			break;
		}
	}
	/***
	 * 開啟第一個Thread
	 * 
	 */
	private void startThreadOne() {
		oneThread mOneThread = new oneThread();
		mOneThread.start();

	}
	/**
	 * 開啟第二個執行緒
	 */
	private void startThreadTwo() {

		twoThread mTwoThread = new twoThread();
		mTwoThread.start();
	}
	class oneThread extends Thread {
		@Override
		public void run() {
			int j = 0;
			Looper.prepare();
			handlerOne = new Handler() {
				@Override
				public void handleMessage(Message msg) {
					super.handleMessage(msg);
					if (msg.what == 2) {
			System.out.println("執行緒1接受到來自執行緒2訊息" + msg.what);
					}
				}
			};
			for (int i = 0; i < 5000; i++) {
				j++;
			}
			if (j > 4000) {
				if (handlerTwo != null) {
					handlerTwo.sendEmptyMessage(1);
				}
			}
			Looper.loop();
		}
	}
	class twoThread extends Thread {
		int m = 0;
		@Override
		public void run() {
			Looper.prepare();
			handlerTwo = new Handler() {
				@Override
				public void handleMessage(Message msg) {
					// TODO Auto-generated method stub
					super.handleMessage(msg);
					if (msg.what == 1) {
		System.out.println("執行緒2收到執行緒1發來的資料" + msg.what);
					}
				}
			};
			for (int i = 0; i < 6000; i++) {
				m++;
			}
			if (m > 5000) {
				if (handlerOne != null) {
		<span style="white-space:pre">	</span>handlerOne.sendEmptyMessage(2);
				}
			}
			Looper.loop();
		}
	}
}
測試結果如下: