android_handler(二)

來源:互聯網
上載者:User

標籤:發送訊息   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(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.