国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2019-12-12 05:31:16
字體:
供稿:網(wǎng)友

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

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

1 Handler類簡介 
Handler類的主要作用有兩個: 
(1)在新啟動的線程中發(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); }

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

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

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

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)前時間:"+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í)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 涿州市| 汉源县| 定南县| 六枝特区| 德江县| 县级市| 五莲县| 安岳县| 长顺县| 盈江县| 千阳县| 湖北省| 铜陵市| 邹城市| 拜城县| 东港市| 策勒县| 江安县| 环江| 宁明县| 项城市| 新田县| 商丘市| 塘沽区| 海城市| 淮南市| 株洲市| 阜康市| 南乐县| 壶关县| 义乌市| 荣昌县| 乌兰县| 井陉县| 永嘉县| 长海县| 清丰县| 钦州市| 海门市| 大同县| 八宿县|