Android學習之Handler訊息傳遞機制

來源:互聯網
上載者:User

標籤:

Android只允許UI線程修改Activity裡的UI組件。當Android程式第一次啟動時,Android會同時啟動一條主線程(Main Thread),主線程主要負責處理與UI相關的事件,如使用者的按鍵事件、螢幕繪圖事件,並把相關的事件分發到對應的組件進行處理。所以,主線程通常又被稱為UI線程。Android只允許UI線程修改Activity裡的UI組件,這樣會導致新啟動的線程無法動態改變介面組件的屬性值。但在實際的Android程式開發中,尤其是涉及動畫的遊戲開發中,需要讓新啟動的線程周期性的改變介面組件的屬性值,這就需要藉助於Handler的訊息傳遞機制來實現了。1 Handler類簡介Handler類的主要作用有兩個:(1)在新啟動的線程中發送訊息sendMessage(Message msg)  或者sendEmptyMessage(int what)  兩者的差異,請看Android源碼:public final boolean sendMessage(Message msg){return sendMessageDelayed(msg, 0);}public final boolean sendEmptyMessage(int what){return sendEmptyMessageDelayed(what, 0);}再看sendEmptyMessageDelayed(what, 0)的源碼:public final boolean sendEmptyMessageDelayed(int what, long delayMillis){Message msg = Message.obtain();msg.what = what;return sendMessageDelayed(msg, delayMillis);}其實,sendMessage(Message msg)  和sendEmptyMessage(int what)  實際上是一樣的,一個傳Message類型的msg,一個傳int類型的what,傳what的,最終會轉為msg。(2)在主線程中擷取、處理訊息public void handleMessage(Message msg)2 使用執行個體下面使用Handler以及Timer類實現時間的自動重新整理
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final TextView txt=(TextView)findViewById(R.id.showTime);final Handler myHandler=new Handler(){@Overridepublic void handleMessage(Message msg){if(msg.what==0x12){txt.setText("目前時間:"+new java.util.Date());}}};Button btn=(Button)findViewById(R.id.btn);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubnew Timer().schedule(new TimerTask() {@Overridepublic void run() {// TODO Auto-generated method stubmyHandler.sendEmptyMessage(0x12);}}, 0,1000);}});}@Overridepublic 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;}}

  

 

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.