Android分析主執行緒與子執行緒,以及子執行緒之間相互通訊
阿新 • • 發佈:2019-01-29
測試結果如下: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(); } } }