Android計時器正確應用方式解析
目前許多大型廠商都紛紛將目光轉(zhuǎn)向了智能手機,在手機領域展開了一場激烈的競爭。由谷歌推出的Android手機操作系統(tǒng)就是一其中一個競爭對手。在這里我們可以了解到Android計時器的相關應用。
昨天晚上在寫一個Android計時器,開始認為很容易,用Java一般寫法,結果發(fā)現(xiàn)計時器根本不能運行,但卻不報任何錯誤,當時就呆在那了,不知道該怎么辦了,后來在網(wǎng)上查了一下,Android考慮到線程安全問題,不允許在線程中執(zhí)行UI線程(我的現(xiàn)在所知道,還有其他的限制發(fā)現(xiàn)中),在Android中,有一個很有意思的類:android.os.Handler,這個可以實現(xiàn)各處線程間的消息傳遞。
先看段代碼,這個實例化了一個Handler,Handler可以通過Message在多個線程通訊,我這里做的是定時recLen加1,然后以一定的格式,顯示到recTime上(UI線程上的操作)。
- final Handler handler = new Handler(){
 - public void handleMessage(Message msg) {
 - switch (msg.what) {
 - case 1:
 - recLen++;
 - recTime.setText(GetRecTime(recLen));
 - break;
 - }
 - super.handleMessage(msg);
 - }
 - };
 
下面定實例化一個TimerTask,這個是為Timer提供一個定時執(zhí)行的內(nèi)容。我在這個方法中加的是給Handler一個發(fā)送消息功能,因這在Timer的線程中,無法直接操作UI線程。
- TimerTask task = new TimerTask(){
 - public void run() {
 - Message message = new Message();
 - message.what = 1;
 - handler.sendMessage(message);
 - }
 - };
 
剩下的工作就簡單多,添加一個Timer,可以讓程序運行起來了
- timer = new Timer(true);
 - timer.schedule(task,1000, 1000);
 - //延時1000ms后執(zhí)行,1000ms執(zhí)行一次
 - //timer.cancel(); //退出Android計時器
 
說到這里,也許有些還感覺云里霧里,好久沒寫東西,也不知道怎么把問題說的更明白,這個再貼上我開始的錯誤寫法,對比錯誤寫法,也許能讓大家更快的明白過來
Android計時器錯誤寫法
- TimerTask task = new TimerTask(){
 - public void run() {
 - recLen++;
 - recTime.setText(GetRecTime(recLen));
 - //直接在TimerTask中操作UI線程,單步調(diào)試的時候發(fā)現(xiàn),程序根本就沒執(zhí)行到這里
 - }
 - };
 - timer = new Timer(true);
 - timer.schedule(task,1000, 1000);
 
Android計時器的相關應用方法就為大家介紹到這里。
【編輯推薦】















 
 
 
 
 
 
 