**:
前段時間在工作的時候碰見乙個問題,就是要待機時在設定的時間內執行操作,開始並沒有意識到問題的嚴重,後來嘗試很多辦法沒有成功,最後也是在網上找到解決辦法,在此稍作總結,希望能對大家有所幫助,不足之處還望大家指正。
1android中的handler、timer、thread、在待機時都會停止執行,所設定的時間會在待機結束後繼續計算。所以如果想在android待機時執行某些操作,使用以上幾種方法是不可行的。
2android中有乙個alarmmanager物件,可以使用該物件執行待機時的操作。具體設定的方法如下:
2.1設定鬧鈴的型別
alarmmanager.rtc,硬體鬧鐘,不喚醒手機(也可能是其它裝置)休眠;當手機休眠時不發射鬧鐘。
alarmmanager.rtc_wakeup,硬體鬧鐘,當鬧鐘發躰時喚醒手機休眠;
alarmmanager.elapsed_realtime,真實時間流逝鬧鐘,不喚醒手機休眠;當手機休眠時不發射鬧鐘。
alarmmanager.elapsed_realtime_wakeup,真實時間流逝鬧鐘,當鬧鐘發躰時喚醒手機休眠;
alarmmanager.power_off_wakeup:能喚醒系統,他是一種關機鬧鈴,就是說裝置在關機狀態下也可以喚醒系統,所以我們把它稱為關機鬧鈴。
rtc鬧鐘和elapsed_realtime最大的差別就是前者可以通過修改手機時間觸發鬧鐘事件,後者要通過真實時間的流逝,即使在休眠狀態,時間也會被計算。
2.2設定鬧鈴的開始時間
如果使用elapsed_realtime或者elapsed_realtime_wakeup型別應該呼叫systemclock.elapsedrealtime()獲取相對時間在加上你設定的延遲時間
如果使用rtc或者rtc_wakeup型別應該呼叫system.currenttimemillis()獲取從1970.1.1號以來的時間在加上你設定的延遲時間
2.3pendingintent
乙個pendingintent物件,表示到時間後要執行的操作。pendingintent與intent類似,可以封裝activity、broadcastreceiver和service。
但與intent不同的是,pendingintent可以脫離應用程式而存在。
接觸android沒幾天,不太了解。
本來寫好的乙個應用在無意中發現,待機的時候,應用中的乙個執行緒停止了執行。
這個執行緒是每隔一分鐘上傳乙個資料到伺服器上。
我當時測試的時候,沒想過待機(接開關鍵)下的情況是怎樣的,現在發現,只要手機一進入待機狀態,這個執行緒就停止工作了。
不過有乙個奇怪的現象,因為我的應用中同時啟動了三個執行緒。
乙個負責每隔一分鐘上傳乙個資料,當待機的時候,這個執行緒暫停執行,當手機不待機的時候,馬上覆活。
乙個負責接收伺服器發過來的udp資料報,這個執行緒倒是不受待機的影響,當有資料來的時候,可以正常處理。
難道是因為datagramsocket.receive(datagrampacket);阻塞的原因?
public void run() }
實驗2:使用alarmservice:
2.1通過alarmservice每個5秒傳送乙個廣播,setrepeating時的型別為alarmmanager.elapsed_realtime。
拔掉usb線,按下電源鍵,過一段時間再次開啟螢幕,發現定時器沒有繼續計數。
2.2setrepeating是的型別設定為alarmmanager.elapsed_realtime_wakeup
拔掉usb線,按下電源鍵,過一點時間再次開啟螢幕,發現定時器一直在計數。
如此看來,使用wakeup才能保證自己想要的定時器一直工作,但是肯定會引起耗電量的增加。
我最後自已寫了乙個service類,然後使用alarmservice每隔一分鐘執行一次,在待機的時候也能正常執行。
解決win xp休眠後無法喚醒的問題
最近聽說一朋友的電腦出現乙個奇怪的現象,每次電腦待機後,總是要重新啟動才能恢復,很是煩人,問我這到底是怎麼回事?應該怎樣解決?根據我的經驗,問題可能出在系統方面,因此一不做二不休,重新安裝windows xp,心想,問題其實就這麼簡單排除了,正洋洋得意之時,沒過幾日,朋友的 又打過來,說是休眠喚醒問...
休眠後電腦馬上自動喚醒解決
檢視計算機是支援休眠 混合睡眠 powercfg a 開啟休眠 powercfg hibernate on 關閉休眠命令是 powercfg hibernate offpowercfg devicequery wake programmablepowercfg devicequery wake ar...
Ubuntu 18 04 休眠後無法喚醒的解決辦法
解決辦法 安裝laptop mode tools工具包。1.檢查是否安裝了grep laptop mode tools 工具包 dpkg l grep laptop mode tools 如果執行命令無結果輸出,表示未安裝 如果已安裝,忽略第2步 2.安裝laptop mode 執行命令 sudo ...