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