2010-08-29 45 views
2

在Symbian中編寫低功耗背景應用程序是否有任何「最佳實踐」?Symbian中的電源管理

具體來說,是否有任何方式(即API)的Symbian應用程序提示操作系統有關其當前狀態,以減少電池消耗? 例如,在Android中,存在Wake Locks的概念,它可以防止設備進入待機模式 - Symbian中是否有類似的東西?

編輯:
運行的代碼與開放-C庫是一個單獨的線程時是否有任何的影響,而不是「原生」的Symbian C++,使用活動對象等? (大多數時候,Open-C代碼在IO上被阻塞)。

回答

3
  1. 您可以使用RTimer :: Inactivity()方法檢查用戶(in)活動。這種方式在Forum Nokia Wiki page中描述。在那裏還介紹瞭如何重置不活動計時器。
  2. 您可以使用HAL API檢查設備屏幕是打開還是關閉。見類HAL和HALData。你可以使用這樣的電話:

TInt displayState; HAL::Get(HALData::EDisplayState, displayState); 如果顯示在其它情況下關閉或1的displayState將舉行爲0。

使用這些API,您將知道用戶現在是否處於活動狀態,因此您將能夠更改後臺服務的行爲以降低其功耗。

您還可以使用Nokia Energy Profiler應用程序記錄手機的功耗,並使用後臺服務的不同節能選項。另請參閱諾基亞的document,其中描述了節省設備電量的最佳做法。這份文件非常簡單,但很有用。

希望這會有所幫助。

編輯:關於單獨的線程和Open C.據我所知,Open C只是一個插件,深入所有的實現仍然是「原生Symbian」。因此,就避免對某些資源進行定期輪詢而只使用普通的阻塞IO而言,您的代碼與標準的Symbian主動對象技術(使用Symbian特定的信號量來阻塞線程)相當經濟實惠。

0

在開發應用程序時,電源管理是一個非常重要的問題。

在Symbian中,它取決於您用於運行後臺活動的內容。

是否使用線程或ActiveX控件。

例如,你正在開發應用程序瀏覽器,你希望瀏覽器下載一些東西,然後下載活動應該在後臺進行,並且能夠開始活動,什麼時候顯示進度以及什麼時候顯示進度,何時結束應該再次提前。

這取決於你如何使用線程管理線程。你可以不喜歡哪個線程當長時間服用活動開始和何時恢復時,後臺活動已暫停執行完畢..

事實上,這是很好的話題ü所遇到

1

我沒有在Symbain中遇到任何特殊的問題以使設備脫離待機模式。基本上,「最佳實踐」將是相同的所有移動設備:

  • 不要循環等待的東西,總是使用任何信號服務avaialble平臺上,爲Symbain ActiveObjects /用戶:: WaitForXxx
  • 限制後臺線程的數量(目前所有移動設備仍然只有1個CPU ...)
  • 不要掛在系統服務上,儘快關閉它們(這通常是我的移動應用程序中的主要電池消耗,有時試圖發現哪些系統服務導致電池消耗最多可能是一個真正的痛苦,WinMo對此非常不利)。

對我來說,我發現它主要歸結於電池壽命和應用程序的性能/響應能力之間的折衷。不幸的是,電源總是與性能/響應方面並列,並且該電池電量不足......

0

曾經有一個不活動計時器可以被應用程序重置。這將阻止屏幕進入任何屏幕保護模式。

如果您在Symbian中使用各種異步功能,您的應用程序將在適當時運行。

其中一種方法應該根據您的需要工作。如果你更詳細地描述你想實現的目標,那麼幫助你會更容易。

1

爲您的應用程序提供低優先級(請參閱RProcess和RThread類)。您的方法將取決於您的後臺應用程序的功能。這些東西消耗大部分電池:收音機(GSM/3G/WIFI /藍牙),屏幕背光,文件訪問。

Symbian OS將一直試圖讓您的應用程序進入睡眠狀態,您不需要告訴它這樣做。只要確保你的方法使它有機會睡覺。