後來通過找了乙個資料才知道如果要定時執行的話,要用alarmmanager,這是鬧鐘服務,android手機中必須要保證alarmmanager的時鐘跟真實時間同步的.所以在 android手機休眠狀態下,alarmmanager時間是不會變慢的. 以下介紹alarmmanager的基本使用.
alarmmanager簡介及使用場景::
alarmmanager的使用機制有的稱呼為全域性定時器,有的稱呼為鬧鐘。通過對它的使用,它的作用和timer有點相似。
都有兩種相似的用法:
(1)在指定時長後執行某項操作
(2)週期性的執行某項操作
alarmmanager物件配合intent使用,可以定時的開啟乙個activity,傳送乙個broadcast,或者開啟乙個service.
當你的應用不在執行,而此時你仍然需要你的應用去執行一些操作(比如,簡訊攔截),只有這種時候才使用alarmmanager, 其他正常情況下的,推薦使用handler。
alarmmanager 生命週期:repeating alarmmanager一旦啟動就會一直在後台執行(除非執行cancel方法),可以在「應用管理」中看到這個應用狀態是正在執行。 「強行停止」可以讓alarmmanager停掉。嘗試了幾種任務管理器, 都只能重置計數器(確實釋放記憶體了),但都無法關閉定時器,只有系統自帶的「強行停止」奏效。
如果某個alarmmanager已經啟動, 程式又再次去啟動它,只要pendingintent是一樣,那麼之前那個alarmmanager會被release掉。
alammanager具體方法及屬性詳解:
alarmmanager 包含的主要方法:
// 取消已經註冊的與引數匹配的定時器
void cancel(pendingintent operation)
//註冊乙個新的延遲定時器
void set(int type, long triggerattime, pendingintent operation)
//註冊乙個重複型別的定時器
void setrepeating(int type, long triggerattime, long interval, pendingintent operation)
//註冊乙個非精密的重複型別定時器
void setinexactrepeating (int type, long triggerattime, long interval, pendingintent operation)
//設定時區
void settimezone(string timezone)
定時器主要型別:
public static final int elapsed_realtime
// 當系統進入睡眠狀態時,這種型別的鬧鈴不會喚醒系統。直到系統下次被喚醒才傳遞它,該鬧鈴所用的時間是相對時間,是從系統啟動後開始計時的,包括睡眠時 間,可以通過呼叫systemclock.elapsedrealtime()獲得。系統值是3 (0x00000003)。
public static final int elapsed_realtime_wakeup
//能喚醒系統,用法同elapsed_realtime,系統值是2 (0x00000002) 。
public static final int rtc
//當系統進入睡眠狀態時,這種型別的鬧鈴不會喚醒系統。直到系統下次被喚醒才傳遞它,該鬧鈴所用的時間是絕對時間,所用時間是utc時間,可以通過呼叫 system.currenttimemillis()獲得。系統值是1 (0x00000001) 。
public static final int rtc_wakeup
//能喚醒系統,用法同rtc型別,系統值為 0 (0x00000000) 。
public static final int power_off_wakeup
//能喚醒系統,它是一種關機鬧鈴,就是說裝置在關機狀態下也可以喚醒系統,所以我們把它稱之為關機鬧鈴。使用方法同rtc型別,系統值為4(0x00000004)。
如何使用alarmmanager?使用alarmmanager共有三種方式, 都是通過pendingintent。
getactivity(context, int, intent, int)
getbroadcast(context, int, intent, int)
getservice(context, int, intent, int)
這邊就舉乙個使用broadcast的例子。
首先是建立乙個broadcast類,需要繼承broadcastreceiver, 如下:
/*
* * @project: alarmtest
* @author: robot
*/package com.yfz;
import android.content.broadcastreceiver;
import android.content.context;
import android.content.intent;
import android.util.log;
/** * @author robot
* @weibo [url]
* @date nov 18, 2011
*/public class actionbroadcast extends broadcastreceiver
} now, 3000, pi);
}}
這邊用repeating的方式。 每隔3秒發一條廣播訊息過去。rtc_wakeup的方式,保證即使手機休眠了,也依然會發廣播訊息。最後看一下androidmanifest檔案,主要是註冊一下activity和broadcast。 (實際使用中最好再加個filter,自己定義乙個action比較好)
Android休眠設定時間
預設情況下,android系統在超過n分鐘沒操作,會自動關屏並進入休眠狀態。實際上,有些專案要求超時不休眠,如果只是針對單個應用程式,我們可以通過電源管理設定狀態來實現,方法一 調整 settings.system.putint getcontentresolver android.provider...
關愛Android手機休眠,為什麼耗電
相信使用android手機的盆友都有乙個共同的疑問 手機沒怎麼用為啥就沒電了?然後想竭盡全力為它省電,恨不得連一天的解鎖次數由原來的800次減少為8次,結果卻只是 然並卵 除了以上幾個人工干預的方法,也有更省心一點的方式為你省電。國內軟體往往會替使用者思考,像360手機衛士極客版支援service服...
Android系統插入OTG後不休眠
這兩天一直忙著搞插入otg宕機的問題。有時候機器上面插入個u盤,滑鼠,或者硬碟,如果這個時候沒有接充電器的話,有很大的概率機器直接宕機了,而且必須插入充電器才能開機。實測電池電壓基本為0,原來是電池過流保護了。由於採購的電池保護點過低 1.5a的時候就掛了 只能想辦法把輸出電流降到最低了,嘗試過很多...