Handler
使用Handler的post方法,將要執行的執行緒物件加到佇列中
handler.post(updateThread); 馬上加入到消息佇列內
創造一個Handler物件
Handler handler = new Handler();
將要執行的功能寫到執行緒物件的run方法中
Runnable updateThread = new Runnable(){
@override
public void run(){
System.out.println(“UpdareThread”);
handler.postDelayed(updateThread, 3000); 每3000毫秒加一次
}
}
將Thread移除
handler.removeCallbacks(updateThread);
將ProgressBar加入到Handler
根據控制鍵ID取的代表控制鍵的物件,並為按鈕設置監聽器
Runnable updateThread = new Runnable(){
int i = 0 ;
@Override
public void run() {
System.out.println("Begin Thread");
i = i + 10 ;
//取的一個消息物件,Message類別由Android操作系統提供
Message msg = updateBarHandler.obtainMessage();
//將msg物件的arg1參數設置為I,用arg1和arg2這兩個成員資料傳遞消息,優點為系統 性能消耗較少
msg.arg1 = i ;
try {
//設置當前執行緒睡眠1秒
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//將msg物件加入到消息佇列中
updateBarHandler.sendMessage(msg);
if( i == 100){ //當i值為100時,將執行緒物件從Handler中移除
updateBarHandler.removeCallbacks(updateThread);
}
}
};
//使用匿名內部類別來覆寫Handler中的handleMessage方法
Handler updateBarHandler = new Handler(){
@Override
public void handleMessage(Message msg) { //取得Message msg
bar.setProgress(msg.arg1);
updateBarHandler.post(updateThread);
}
sendMessage(msg); 送msg到佇列
handleMessage(Message msg) 從佇列取msg
Handler不是產生一個thread來執行而是直接使用runnable方法
Handler不是產生一個thread來執行而是直接使用runnable方法
Bundle 類似鍵值對
HandlerThread 實作了looper來處理消息佇列功能
這個類別由Android應用程序框架提供
HandlerThread handlerThread = new HandlerThread(“handler_thread”);
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage(); //得到消息
Msg.sendToTarget(); //將msg發送到目標物件,所謂的目標物件就是生成msg物件的handler物件
class MyHandler exteands Handler{
public MyHandler(){
}
Public MyHandler(Looper looper){ //將handler綁定到looper上
super(looper);
}
}
傳送資料與取得資料
msg.obj=”abc”;
String s = (String)msg.obj;
傳送大量資料利用Bundle
Bundle b = new Bundle();
b.putInt(“age”, 20);
b.putString(“name”, “Jhon”);
msg.setData(b);
msg.sendToTarget();
取資料
Bundle b = msg.getData();
Int ag = b.getInt(“age”);
String name = b.getString(“name”);
沒有留言:
張貼留言