AlarmManager是Android的全局定時器。就是在指定時間做一個事情(封裝在PendingIntent)。通過PendingIntent的getActivity()、getService()或getBroadcast()來執(zhí)行。

創(chuàng)新互聯(lián)主營南宮網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶APP開發(fā)公司,南宮h5小程序制作搭建,南宮網(wǎng)站營銷推廣歡迎南宮等地區(qū)企業(yè)咨詢
聽起來AlarmManager和Timer很類似,但是Timer有可能因為手機休眠而被殺掉服務(wù),但是AlarmManager可以做到喚醒手機。
注:ALARM_SERVIC是context的一個常量。
以上絕對時間就是手機的時間,相對時間是相對于當(dāng)前開機時間來說。例如如果是絕對時間,那么你測試可以通過修改系統(tǒng)時間來提前觸發(fā)。而相對時間的使用場景是強調(diào)多久之后觸發(fā),例如2小時后,這個時候把時間修改到2小時后也是沒用的。
注:以前還有一個POWER_OFF_WAKEUP,即使在關(guān)機后還能提醒,但是Android4.0以后就沒有了。
該方法用于設(shè)置一次性鬧鐘。第一個參數(shù)是鬧鐘類型,第二個參數(shù)是觸發(fā)時間,第三個參數(shù)是動作。
和set一樣,但是時間更精準(zhǔn)。
重復(fù)鬧鐘,第1、2、4個參數(shù)同上,第3個參數(shù)是兩次鬧鐘的時間間隔。
和setInexactRepeating一樣,但是時間更精準(zhǔn)。
以上四個方法時間精不精準(zhǔn)的原因還沒有深入研究,大概是是否允許系統(tǒng)同時發(fā)出多個提醒,意義在于系統(tǒng)喚醒cpu后會把時間接近的alarm同時發(fā)出,避免重復(fù)喚醒cpu,減少電量。
取消鬧鐘。
目的:在指定時間從一個發(fā)送個廣播,收到廣播后打印log。界面如下面這樣。
布局:
廣播接收器:
MainActivity
AndroidManifest要注冊一下receiver
經(jīng)過測試,以上的時間間隔intervalMillis即使設(shè)置5秒也是沒用的,因為誤差(幾十秒呢)無法避免,即使是setRepeating。所以精確是相對的。
內(nèi)存泄漏是指分配出去的內(nèi)存無法回收了
內(nèi)存泄漏指由于疏忽或錯誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存的情況,是應(yīng)用程序分配某段內(nèi)存后,由于設(shè)計錯誤,失去了對該段內(nèi)存的控制,因而造成了內(nèi)存的浪費。
一般我們常說的內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分配的,大小任意的(內(nèi)存塊的大小可以在程序運行期決定),使用完后必須顯示釋放的內(nèi)存。應(yīng)用程序一般使用malloc,realloc,new等函數(shù)從堆中分配到一塊內(nèi)存,使用完后,程序必須負責(zé)相應(yīng)的調(diào)用free或delete釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了。
內(nèi)存溢出是指程序要求的內(nèi)存,超出了系統(tǒng)所能分配的范圍,從而發(fā)生溢出。
內(nèi)存溢是指在一個域中輸入的數(shù)據(jù)超過它的要求而且沒有對此作出處理引發(fā)的數(shù)據(jù)溢出問題,多余的數(shù)據(jù)就可以作為指令在計算機上運行。
??開發(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è)置重復(fù)鬧鐘,其中參數(shù)說明如下:
type:鬧鐘類型
startTime:首次執(zhí)行鬧鐘的時間
intervalTime:兩次執(zhí)行鬧鐘的時間間隔
pi:鬧鐘響應(yīng)動作
(3) setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi);
該方法也用于設(shè)置重復(fù)鬧鐘,與第二個方法相似,區(qū)別在于其兩次鬧鐘執(zhí)行的間隔時間不是固定的。
?? AlarmManager實現(xiàn)定時的方法,我還沒有用到過,以上內(nèi)容是在網(wǎng)上查找資料后自己在一個小demo中小小試驗了的,有錯誤或描述不清的地方請見諒。下面是我參考的介紹AlarmManager的三篇文章。
你的意思是,假設(shè)3個RadioButton,第一個設(shè)為10秒,第二個設(shè)為20秒,第三個設(shè)為30秒,然后一起倒計時到0嗎?如果是這樣的話,只需要在Handler的handleMessage中去減時間就行了。
Handler
handler=new
Handler(){
@Override
public
void
handleMessage(Message
msg)
{
super.handleMessage(msg);
xx.setText(Integer.parseInt(xx.getText()-1);
}
};
從Mac系統(tǒng)換到Windows,run android后真機和模擬器的定時器都不運行(Mac下run android不會),看了下 ,這個問題原來一直都有。原因是真機或者模擬器上的時間和電腦的時間不同步。解決方法:
打開手機的 系統(tǒng)設(shè)置? -? 日期和時間? - 把 自動確認時間 的選項去掉 - 在 設(shè)置時間 里面選擇大于電腦時間的新的時間
我的是直接調(diào)到2分鐘后,在run一次,OK了。ヾ(?°?°?)??
分享題目:android定時器,Android定時器
瀏覽地址:http://chinadenli.net/article31/dsshspd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)站設(shè)計公司、外貿(mào)建站、企業(yè)網(wǎng)站制作、品牌網(wǎng)站制作、定制開發(fā)
聲明:本網(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)