Android手機休眠後時間不準確的解決方案

2021-08-27 04:34:43 字數 3002 閱讀 2354

後來通過找了乙個資料才知道如果要定時執行的話,要用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的時候就掛了 只能想辦法把輸出電流降到最低了,嘗試過很多...