基于Android中實(shí)現(xiàn)定時(shí)器的3種解決方法
更新時(shí)間:2013年05月20日 16:58:50 作者:
基于Android中實(shí)現(xiàn)定時(shí)器的3種解決方法
在Android開發(fā)中,定時(shí)器一般有以下3種實(shí)現(xiàn)方法:
一、采用Handler與線程的sleep(long)方法
二、采用Handler的postDelayed(Runnable, long)方法
三、采用Handler與timer及TimerTask結(jié)合的方法
下面逐一介紹:
一、采用Handle與線程的sleep(long)方法
Handler主要用來(lái)處理接受到的消息。這只是最主要的方法,當(dāng)然Handler里還有其他的方法供實(shí)現(xiàn),有興趣的可以去查API,這里不過(guò)多解釋。
1. 定義一個(gè)Handler類,用于處理接受到的Message。
Handler handler = new Handler() {
public void handleMessage(Message msg) {
// 要做的事情
super.handleMessage(msg);
}
};
2. 新建一個(gè)實(shí)現(xiàn)Runnable接口的線程類,如下:
public class MyThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);// 線程暫停10秒,單位毫秒
Message message = new Message();
message.what = 1;
handler.sendMessage(message);// 發(fā)送消息
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3. 在需要啟動(dòng)線程的地方加入下面語(yǔ)句:
new Thread(new MyThread()).start();
4. 啟動(dòng)線程后,線程每10s發(fā)送一次消息。二、采用Handler的postDelayed(Runnable, long)方法
這個(gè)實(shí)現(xiàn)比較簡(jiǎn)單一些。
1. 定義一個(gè)Handler類
Handler handler=new Handler();
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情
handler.postDelayed(this, 2000);
}
};
2. 啟動(dòng)計(jì)時(shí)器
handler.postDelayed(runnable, 2000);//每?jī)擅雸?zhí)行一次runnable
3. 停止計(jì)時(shí)器
handler.removeCallbacks(runnable);
三、采用Handler與timer及TimerTask結(jié)合的方法
1. 定義定時(shí)器、定時(shí)器任務(wù)及Handler句柄
private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
// 要做的事情
super.handleMessage(msg);
}
};
2. 初始化計(jì)時(shí)器任務(wù)
task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
3. 啟動(dòng)定時(shí)器
timer.schedule(task, 2000, 2000);
簡(jiǎn)要說(shuō)一下上面三步提到的一些內(nèi)容:
1. 定時(shí)器任務(wù)(TimerTask)顧名思義,就是說(shuō)當(dāng)定時(shí)器到達(dá)指定的時(shí)間時(shí)要做的工作,這里是想Handler發(fā)送一個(gè)消息,由Handler類進(jìn)行處理。
2. java.util.Timer.schedule(TimerTask task, long delay):這個(gè)方法是說(shuō),dalay/1000秒后執(zhí)行task.只執(zhí)行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):這個(gè)方法是說(shuō),delay/1000秒后執(zhí)行task,然后進(jìn)過(guò)period/1000秒再次執(zhí)行task,這個(gè)用于循環(huán)任務(wù),執(zhí)行無(wú)數(shù)次,當(dāng)然,你可以用timer.cancel();取消計(jì)時(shí)器的執(zhí)行。
一、采用Handler與線程的sleep(long)方法
二、采用Handler的postDelayed(Runnable, long)方法
三、采用Handler與timer及TimerTask結(jié)合的方法
下面逐一介紹:
一、采用Handle與線程的sleep(long)方法
Handler主要用來(lái)處理接受到的消息。這只是最主要的方法,當(dāng)然Handler里還有其他的方法供實(shí)現(xiàn),有興趣的可以去查API,這里不過(guò)多解釋。
1. 定義一個(gè)Handler類,用于處理接受到的Message。
復(fù)制代碼 代碼如下:
Handler handler = new Handler() {
public void handleMessage(Message msg) {
// 要做的事情
super.handleMessage(msg);
}
};
2. 新建一個(gè)實(shí)現(xiàn)Runnable接口的線程類,如下:
復(fù)制代碼 代碼如下:
public class MyThread implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(10000);// 線程暫停10秒,單位毫秒
Message message = new Message();
message.what = 1;
handler.sendMessage(message);// 發(fā)送消息
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3. 在需要啟動(dòng)線程的地方加入下面語(yǔ)句:
復(fù)制代碼 代碼如下:
new Thread(new MyThread()).start();
4. 啟動(dòng)線程后,線程每10s發(fā)送一次消息。二、采用Handler的postDelayed(Runnable, long)方法
這個(gè)實(shí)現(xiàn)比較簡(jiǎn)單一些。
1. 定義一個(gè)Handler類
復(fù)制代碼 代碼如下:
Handler handler=new Handler();
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情
handler.postDelayed(this, 2000);
}
};
2. 啟動(dòng)計(jì)時(shí)器
復(fù)制代碼 代碼如下:
handler.postDelayed(runnable, 2000);//每?jī)擅雸?zhí)行一次runnable
3. 停止計(jì)時(shí)器
復(fù)制代碼 代碼如下:
handler.removeCallbacks(runnable);
三、采用Handler與timer及TimerTask結(jié)合的方法
1. 定義定時(shí)器、定時(shí)器任務(wù)及Handler句柄
復(fù)制代碼 代碼如下:
private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
// 要做的事情
super.handleMessage(msg);
}
};
2. 初始化計(jì)時(shí)器任務(wù)
復(fù)制代碼 代碼如下:
task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
3. 啟動(dòng)定時(shí)器
復(fù)制代碼 代碼如下:
timer.schedule(task, 2000, 2000);
簡(jiǎn)要說(shuō)一下上面三步提到的一些內(nèi)容:
1. 定時(shí)器任務(wù)(TimerTask)顧名思義,就是說(shuō)當(dāng)定時(shí)器到達(dá)指定的時(shí)間時(shí)要做的工作,這里是想Handler發(fā)送一個(gè)消息,由Handler類進(jìn)行處理。
2. java.util.Timer.schedule(TimerTask task, long delay):這個(gè)方法是說(shuō),dalay/1000秒后執(zhí)行task.只執(zhí)行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):這個(gè)方法是說(shuō),delay/1000秒后執(zhí)行task,然后進(jìn)過(guò)period/1000秒再次執(zhí)行task,這個(gè)用于循環(huán)任務(wù),執(zhí)行無(wú)數(shù)次,當(dāng)然,你可以用timer.cancel();取消計(jì)時(shí)器的執(zhí)行。
您可能感興趣的文章:
- js定時(shí)器怎么寫?就是在特定時(shí)間執(zhí)行某段程序
- JavaScript定時(shí)器詳解及實(shí)例
- Javascript/Jquery——簡(jiǎn)單定時(shí)器的多種實(shí)現(xiàn)方法
- JS定時(shí)器實(shí)例
- 獲取焦點(diǎn)時(shí),利用js定時(shí)器設(shè)定時(shí)間執(zhí)行動(dòng)作
- js定時(shí)器的使用(實(shí)例講解)
- js定時(shí)器(執(zhí)行一次、重復(fù)執(zhí)行)
- JavaScript 定時(shí)器 SetTimeout之定時(shí)刷新窗口和關(guān)閉窗口(代碼超簡(jiǎn)單)
- 詳解小程序退出頁(yè)面時(shí)清除定時(shí)器
相關(guān)文章
Android使用JobScheduler定期推送本地通知實(shí)例代碼
本篇文章主要介紹了Android使用JobScheduler定期推送本地通知實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Android RadioGroup多行顯示效果 解決單選問(wèn)題
這篇文章主要為大家詳細(xì)介紹了Android RadioGroup多行顯示效果,解決單選問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
Android 日常開發(fā)總結(jié)的60條技術(shù)經(jīng)驗(yàn)
這篇文章主要介紹了Android日常開發(fā)總結(jié)的技術(shù)經(jīng)驗(yàn)60條,需要的朋友可以參考下2016-03-03
android中實(shí)現(xiàn)指針滑動(dòng)的動(dòng)態(tài)效果方法
本次實(shí)現(xiàn)的是類似于墨跡天氣中軌跡圖片上指針隨著數(shù)值滾動(dòng)滑動(dòng)的效果,基本思路是開啟線程,控制指針?biāo)诘膇mageview控件的padding屬性。2013-03-03
Android scheme 跳轉(zhuǎn)的設(shè)計(jì)與實(shí)現(xiàn)詳解
這篇文章主要介紹了Android scheme 跳轉(zhuǎn)的設(shè)計(jì)與實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
詳解Flutter中StatefulBuilder組件的使用
StatefulBuilder小部件可以在這些區(qū)域的狀態(tài)發(fā)生變化時(shí)僅重建某些小區(qū)域而無(wú)需付出太多努力。本文將來(lái)詳細(xì)講講它的使用,需要的可以參考一下2022-05-05
Android更多條目收縮展開控件ExpandView的示例代碼
本篇文章主要介紹了Android更多條目收縮展開控件ExpandView的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

