新聞中心
Android考慮到線程安全問題,不允許在線程中執(zhí)行UI線程,在Android中,有一個很有意思的類:android.os.Handler,這個可以實現(xiàn)各處線程間的消息傳遞。先看段代碼,這個實例化了一個Handler,Handler可以通過Message在多個線程通訊,我這里做的是定時recLen加1,然后以一定的格式,顯示到recTime上(UI線程上的操作)。

創(chuàng)新互聯(lián)建站溝通電話:18980820575,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)頁制作領(lǐng)域十多年,包括橡塑保溫等多個方面擁有多年的網(wǎng)站運(yùn)維經(jīng)驗,選擇創(chuàng)新互聯(lián)建站,為網(wǎng)站保駕護(hù)航。
- 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,可以讓程序運(yùn)行起來了
- timer = new Timer(true);
- timer.schedule(task,1000, 1000); //延時1000ms后執(zhí)行,1000ms執(zhí)行一次
- //timer.cancel(); //退出計時器
說到這里,也許有些還感覺云里霧里,筆者好久沒寫東西,也不知道怎么把問題說的更明白,這個再貼上筆者開始的錯誤寫法,對比錯誤寫法,也許能讓大家更快的明白過來。
- 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);
文章標(biāo)題:Android計時器Timer用法
文章出自:http://www.5511xx.com/article/cdhdshd.html


咨詢
建站咨詢
