2011-11-24 108 views
0

我有一個應用程序,它有一個服務和一個主要活動。該服務運行一個倒數計時器,並向接收事件的活動發送偶數,以在屏幕上繪製/刷新倒數計時器。很簡單。現在我正在調查電池使用情況,這是非常非常高的Android電池保存

我打算將定時抽頭從200毫秒減少到800毫秒,並將可運行的服務線程從500減少到800.這樣可以節省電池我懷疑。

但幾個問題:

  1. 我的主要問題:當屏幕鎖定(我有一個局部喚醒鎖),並繼續Android的更新屏幕?如果是這樣,我可以嘗試在屏幕關閉時不發送刷新信息(我如何檢測屏幕被鎖定?)。你認爲這可以幫助嗎?

  2. 您是否知道節省電池的編程或應用程序設計的最佳做法?我一直在尋找一個關於它的網頁,但沒有發現任何有趣的東西。

  3. 是否有數據庫打開廢電池?

感謝

回答

1

1:你可以使用Alarmmanager到perfom更新。 (看看這裏:android appwidgets

注意:如果設備處於睡眠狀態時,它是時間的更新(如updatePeriodMillis定義),則該設備將依次進行更新醒來如果您不要每小時更新一次以上,這可能不會對電池壽命造成重大問題,但是,如果您需要更頻繁地更新和/或在設備睡着時不需要更新,那麼您可以改爲基於不會喚醒設備的警報進行更新,爲此,請使用AlarmManager設置您的AppWidgetProvider接收的Intent的警報,將警報類型設置爲ELAPSED_REALTIME或RTC,該警報類型只會發送警報當設備喚醒時,然後將updatePeriodMillis設置爲零(「0」)。

這應該可用於小部件和「正常」活動。

2:我不知道一個官方文檔。但是你應該問自己以下問題:是否有必要經常更新?如果事件離開5個小時,您是否需要每秒或每分鐘更新GUI?您可以級聯更新:事件越接近,更新頻率越高。我想不是。我想不是。

+0

報警管理器不是那種實時的。他似乎需要快速的實時更新,所以他應該使用表面視圖和工作線程。 –

+0

問題仍然存在,如果它必須是真正實時的;) – Redfox

+0

實時更新活動ui,但是如果設備被鎖定,我只需要服務活動(partial_wake_lock)來查看倒計時時間到達cero以運行通知。將是一個有用的戰略不播出剩下的時間活動?不能用鬧鐘來完成,並忘記了counddowntimer,因爲如果設備醒來,那麼活動ui不會刷新。 – Tibor

0
  1. (取決於您的代碼)您的服務將繼續運行併發送消耗CPU週期和耗電功率的更新事件。無論您嘗試更新哪項活動,它在屏幕鎖定後都已暫停。有關於屏幕關閉/屏幕的標準廣播 - 只需在您的服務中接收並停止工作。或者,當要更新的活動收到onPause()回調時停止服務,並在onResume()中重新啓動它(如果沒有焦點,則無需刷新活動)

  2. 請參閱1和grok安卓教程。基本理念:不要做無用的東西。

  3. 它沒有。除非你在查詢。