Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習之Handler消息傳遞機制,androidhandler

Android學習之Handler消息傳遞機制,androidhandler

編輯:關於android開發

Android學習之Handler消息傳遞機制,androidhandler


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 {

	@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("當前時間:"+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;
	}

}

  

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved