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

