它使用的是單一Thread運作方式,意思就是UI前端只有一個Thread (ex View),
其餘都在背景執行,而背景執行的thread若要用到前景Thread的事件或方法,
則會產生錯誤事件:CalledFromWrongThreadException
那Android背景事件該如何使用前景呢,
舉例來說若我們啟動了一個Timer,它便會於背景執行,
但若在Timer的 TimerTask中我們想要讓他啟動一個動作(如Toast)
這時若以傳統Java Swing的方式執行是沒問題的,
但若在Android執行,則無法顯示結果,
那該怎麼辦呢?
事實上Android提供了一個類別用來讓背景Thread使用前景的物件,
這個類別便是 Handler ,詳見:Android Handler Doc
接續上述的例子,
我們便可以透過Handler的message 傳送,來達到操作前景Thread的效果囉。
BP
final Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Toast toast = Toast.makeText(getApplicationContext(), "SHOW)", Toast.LENGTH_SHORT);
toast.show();
break;
}
super.handleMessage(msg);
}
};
timer = new Timer();
TimerTask timerTask = new TimerTask() {
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
//設定Alarm time,且Time out時會執行timerTask送出信息
timer.schedule(timerTask, 3000, 3000);
沒有留言:
張貼留言