欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

學(xué)習(xí)Android Handler消息傳遞機(jī)制

 更新時(shí)間:2016年08月27日 11:34:49   作者:zhouhb  
這篇文章主要為大家詳細(xì)介紹了Android Handler消息傳遞機(jī)制,感興趣的小伙伴們可以參考一下

Android只允許UI線程修改Activity里的UI組件。當(dāng)Android程序第一次啟動(dòng)時(shí),Android會(huì)同時(shí)啟動(dòng)一條主線程(Main Thread),主線程主要負(fù)責(zé)處理與UI相關(guān)的事件,如用戶的按鍵事件、屏幕繪圖事件,并把相關(guān)的事件分發(fā)到對應(yīng)的組件進(jìn)行處理。所以,主線程通常又被稱為UI線程。 

Android只允許UI線程修改Activity里的UI組件,這樣會(huì)導(dǎo)致新啟動(dòng)的線程無法動(dòng)態(tài)改變界面組件的屬性值。但在實(shí)際的Android程序開發(fā)中,尤其是涉及動(dòng)畫的游戲開發(fā)中,需要讓新啟動(dòng)的線程周期性的改變界面組件的屬性值,這就需要借助于Handler的消息傳遞機(jī)制來實(shí)現(xiàn)了。 

1 Handler類簡介 
Handler類的主要作用有兩個(gè): 
(1)在新啟動(dòng)的線程中發(fā)送消息 
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); 
}

 其實(shí),sendMessage(Message msg)  和sendEmptyMessage(int what)  實(shí)際上是一樣的,一個(gè)傳Message類型的msg,一個(gè)傳int類型的what,傳what的,最終會(huì)轉(zhuǎn)為msg。 

(2)在主線程中獲取、處理消息
 public void handleMessage(Message msg) 

2 使用實(shí)例 
下面使用Handler以及Timer類實(shí)現(xiàn)時(shí)間的自動(dòng)刷新

public class MainActivity extends Activity {
 
 @Override
 protected 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()
 {
  @Override
  public void handleMessage(Message msg)
  {
  if(msg.what==0x12)
  {

   txt.setText("當(dāng)前時(shí)間:"+new java.util.Date());

  }
  }
 };
 Button btn=(Button)findViewById(R.id.btn);
 btn.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View arg0) {
  // TODO Auto-generated method stub

  new Timer().schedule(new TimerTask() {
  @Override
   public void run() {
   // TODO Auto-generated method stub

   myHandler.sendEmptyMessage(0x12);
   }
  }, 0,1000);  
  }
 });

 }
 

 @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;
 }
 

} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論