標籤:發送訊息 file message 取出 star 線程 tco pop 效果
這篇記錄 android 訊息機制中。WorkThread 類比向網路訪問資料,獲得資料後,返回 message 發送給 MainThread ,並改動 TextView 的 text 的這種一個步驟。(MainThread ← WorkThread)。
步驟:
1、在 MainThread 中建立一個 handler 對象。複寫 handlemessage() 方法。
2、WorkThread 調用 handermessage() 的 sendMessage() 方法發送訊息到訊息佇列
3、looper 在訊息佇列中取出訊息對象,交給 MainThread 的handlemessage() 方法處理。
代碼:
layout:
<TextView android:id="@+id/textViewId" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="資料"/> <Button android:id="@+id/buttonId" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/textViewId" android:text="發送訊息" />
activity:
package com.away.b_07_handler02;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {private TextView textView;private Button button;private Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.textViewId);button = (Button) findViewById(R.id.buttonId);handler = new MyHandler();button.setOnClickListener(new ButtonListener());}class MyHandler extends Handler {@Overridepublic void handleMessage(Message msg) {System.out.println("handlerMessage ---->> :" + Thread.currentThread().getName());String s = (String) msg.obj;textView.setText(s);}}class ButtonListener implements OnClickListener {@Overridepublic void onClick(View arg0) {Thread t = new NetworkThread();t.start();}}class NetworkThread extends Thread {@Overridepublic void run() {System.out.println("network ---->> :" + Thread.currentThread().getName());// 類比訪問網路,所以說當線程休眠時,首先休眠2秒鐘try {Thread.sleep(2 * 1000);} catch (InterruptedException e) {e.printStackTrace();}// 變數s的值,類比從網路其中擷取的資料String s = "網路其中擷取的資料";// textView.setText(s); 這樣的做法是錯誤的,由於在android系統其中,僅僅有mainthread其中才幹操作UIMessage msg = handler.obtainMessage();msg.obj = s;// sendMessage()方法,不管是在主線程其中發送還是在workers thread其中發送,都是能夠的handler.sendMessage(msg);}}}
效果:
歡迎交流 http://blog.csdn.net/ycwol/article/details/42066449
android_handler(二)