你的意思是,假設(shè)3個RadioButton,第一個設(shè)為10秒,第二個設(shè)為20秒,第三個設(shè)為30秒,然后一起倒計時到0嗎?如果是這樣的話,只需要在Handler的handleMessage中去減時間就行了。

創(chuàng)新互聯(lián)是專業(yè)的萊山網(wǎng)站建設(shè)公司,萊山接單;提供成都做網(wǎng)站、網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行萊山網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
xx.setText(Integer.parseInt(xx.getText()-1);
}
};
在Android上常用的定時器有兩種,一種是Java.util.Timer,一種就是系統(tǒng)的AlarmService了。
實驗1:使用Java.util.Timer。
在onStart()創(chuàng)創(chuàng)建Timer,每5秒更新一次計數(shù)器,并啟動。
Java代碼
1mTimer = new Timer();
2mTimer.schedule(new TimerTask() {
3 @Override
4 public void run() {
5 ++mCount;
6 mHandler.sendEmptyMessage(0);
7 }
8 }, 5*1000, 5*1000);
當連接USB線進行調(diào)試時,會發(fā)現(xiàn)一切工作正常,每5秒更新一次界面,即使是按下電源鍵,仍然會5秒觸發(fā)一次。
當拔掉USB線,按下電源鍵關(guān)閉屏幕后,過一段時間再打開,發(fā)現(xiàn)定時器明顯沒有繼續(xù)計數(shù),停留在了關(guān)閉電源鍵時的數(shù)字。
實驗2:使用AlarmService:
2.1通過AlarmService每個5秒發(fā)送一個廣播,setRepeating時的類型為AlarmManager.ELAPSED_REALTIME。
Java代碼
1AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
2am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000, sender);
拔掉USB線,按下電源鍵,過一段時間再次打開屏幕,發(fā)現(xiàn)定時器沒有繼續(xù)計數(shù)。
2.2setRepeating是的類型設(shè)置為AlarmManager.ELAPSED_REALTIME_WAKEUP
Java代碼
1AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
2am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, sender);
拔掉USB線,按下電源鍵,過一點時間再次打開屏幕,發(fā)現(xiàn)定時器一直在計數(shù)。
如此看來,使用WAKEUP才能保證自己想要的定時器一直工作,但是肯定會引起耗電量的增加。
??開發(fā)中經(jīng)常遇到用計時器的時候,例如:每秒輸出一次log,這時候就要用到延時操作,這里總結(jié)了幾種常用的方法。
?? AlarmManager 是Android的全局定時器,可以在指定時間執(zhí)行定時任務(wù)。定時任務(wù)通過PendingIntent 的 getActivity()、getService()或 getBroadcast() 來執(zhí)行。簡單的說就是我們設(shè)定一個時間,然后在該時間到來時,AlarmManager為我們廣播一個我們設(shè)定的Intent出來,在接收到設(shè)定的Intent時執(zhí)行定時任務(wù)。
(2) setRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
該方法用于設(shè)置重復鬧鐘,其中參數(shù)說明如下:
type:鬧鐘類型
startTime:首次執(zhí)行鬧鐘的時間
intervalTime:兩次執(zhí)行鬧鐘的時間間隔
pi:鬧鐘響應動作
(3) setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
該方法也用于設(shè)置重復鬧鐘,與第二個方法相似,區(qū)別在于其兩次鬧鐘執(zhí)行的間隔時間不是固定的。
?? AlarmManager實現(xiàn)定時的方法,我還沒有用到過,以上內(nèi)容是在網(wǎng)上查找資料后自己在一個小demo中小小試驗了的,有錯誤或描述不清的地方請見諒。下面是我參考的介紹AlarmManager的三篇文章。
可以用Service+Broadcast+Handler來實現(xiàn)。
Handler在Service里
在Service里主要邏輯為:用Handler實現(xiàn)每分鐘發(fā)送一次廣播
Broadcast在Activity里,內(nèi)部類的形式
Broadcast接收廣播并調(diào)用某某方法。
核心:Activity開啟服務(wù),讓服務(wù)每隔一分鐘就發(fā)送一條廣播通知調(diào)用某某方法。
這是Activity里的代碼
public?class?MainActivity?extends?Activity??{
public?Intent?startService;
//發(fā)送廣播需要的Action
public?static?final?String?BROADCAST_ACTION="broadcast.action";
/**?Called?when?the?activity?is?first?created.?*/
@Override
public?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//在這里注冊廣播
IntentFilter?filter?=?new?IntentFilter();
filter.addAction(ConstantTool.BROADCAST_ACTION);
registerReceiver(myResver,?filter);
//設(shè)置服務(wù)
startService?=?new?Intent(MusicService.SERVICE_ACTION);
startService.setClass(this,?MusicService.class);
}
//假設(shè)這是你每分鐘都要調(diào)用一次的方法
private?void?initViews()?{
}
//這個點擊事件來控制什么時候開啟服務(wù)
private?OnClickListener?clickListener=new?OnClickListener()?{
@Override
public?void?onClick(View?v)?{
//?TODO?Auto-generated?method?stub
startService(startService);
}
};
/**
?*?廣播
?*?
?*?@author?Administrator
?*?
?*/
class?MyResver?extends?BroadcastReceiver?{
@Override
public?void?onReceive(Context?context,?Intent?intent)?{
//首先判斷你的Action是否一致
if?(BROADCAST_ACTION.equals(intent.getAction()))?{
//如果一致,那么就調(diào)用方法
initVies();
}
}
}
@Override
protected?void?onDestroy()?{
//?TODO?Auto-generated?method?stub
super.onDestroy();
//銷毀廣播
unregisterReceiver(myResver);
}
}
Service里的代碼
public?class?MusicService?extends?Service?{
//這里面的值可以隨意,因為在AndroidManifest里已經(jīng)注冊了
public?static?final?String?SERVICE_ACTION="service.action";
public?MusicService()?{
//?TODO?Auto-generated?constructor?stub
}
@Override
public?IBinder?onBind(Intent?arg0)?{
//?TODO?Auto-generated?method?stub
return?null;
}
@Override
public?void?onCreate()?{
//?TODO?Auto-generated?method?stub
super.onCreate();
}
//創(chuàng)建一個Handler
Handler?mHandler?=?new?Handler()?{
public?void?handleMessage(android.os.Message?msg)?{
int?currentTime?=?msg.arg1;
Intent?broadcast?=?new?Intent(MainActivity.BROADCAST_ACTION);
sendBroadcast(broadcast);
};
};
//創(chuàng)建一個線程
Runnable?updateThread?=?new?Runnable()?{
@Override
public?void?run()?{
if?(mMediaPlayer?!=?null)?{
Message?msg?=?mHandler.obtainMessage();
mHandler.postDelayed(updateThread,?60*1000);
}
}
};
@Override
public?void?onStart(Intent?intent,?int?startId)?{
//?TODO?Auto-generated?method?stub
super.onStart(intent,?startId);
//在這里判斷是否是啟動服務(wù)的那個Action
if?(intent.getAction().equals(SERVICE_ACTION))?{
mHandler.postDelayed(updateThread,?60*1000);
}
}
}
服務(wù)綁定
service?android:name="com.seekbar.android.service.MusicService"/
分享名稱:android的定時器,安卓間隔定時器
當前地址:http://chinadenli.net/article1/dsehjid.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、動態(tài)網(wǎng)站、服務(wù)器托管、定制開發(fā)、靜態(tài)網(wǎng)站、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)