Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之Handler詳解

Android之Handler詳解

編輯:關於Android編程

handler是什麼?

handler是android給我們提供用來更新UI的一套機制,也是一套消息處理的機制,我們可以發送消息,也可以通過他處理消息。

為什麼要用handler?

Android在設計的時候,就封裝了一套消息創建,傳遞,處理機制,如果不遵循這樣的機制,就沒有辦法更新UI消息了,就會拋出異常消息。

handler用法(一)

代碼示例:

public class MainActivity extends Activity {

private TextView tv;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv1);

new Thread(){
public void run() {
try {
Thread.sleep(1000);
//更新文本信息
tv.setText("update Thread");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}

異常原因:只能在原線程中更新UI

\

利用Handler更新UI,可以執行成功

public class MainActivity extends Activity {

private TextView tv;
private Handler handler = new Handler();


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv1);

new Thread(){
public void run() {
try {
Thread.sleep(1000);
handler.post(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
//更新文本信息
tv.setText("update Thread");
}
});

} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}


}

利用handrle做一個圖片輪詢的示例:

public class MainActivity extends Activity {

private TextView tv;
private ImageView img;
private Handler handler = new Handler();
private int images[] = {R.drawable.one,R.drawable.two,R.drawable.three};
private int index;
private MyRunnable myRunnable= new MyRunnable();
class MyRunnable implements Runnable{
/**
* TODO 簡單描述該重寫方法的實現功能(可選).
* @author Administrator 2014-12-25
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
index ++;
index = index%3;
img.setImageResource(images[index]);
handler.postDelayed(myRunnable, 1000);
}
}



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv1);
img = (ImageView) findViewById(R.id.imageView1);
handler.postDelayed(myRunnable, 1000);


}


}


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