Android應用開發中的網絡、定位、傳感器等都是比較耗電的特性,咱們應該正確使用API來有效下降應用的耗電量。
1.BroadcastReceiver:
在代碼實現中須要儘可能避免無用操做代碼的執行,減小應用損耗的電量。
對於BroadcastReceiver,一般的作法是在界面onPasuse以後取消廣播監聽器的監聽操做,同時根據具體業務需求選擇當應用位於後臺時是否禁用廣播接收器。
2.數據傳輸:
數據傳輸方式:藍牙傳輸,Wi-Fi傳輸,移動網絡傳輸等。
優化:
後臺數據傳輸的管理:根據具體業務需求,嚴格限制應用位於後臺時是否禁用某些數據傳輸,儘可能可以避免無效的數據傳輸。
數據傳輸的頻度問題:經過經驗值或者數據統計的方法肯定好數據傳輸的頻度,避免冗餘重複的數據傳輸,數據傳輸過程當中要壓縮數據大小,合併網絡請求,避免輪詢等。
3.位置服務:
三種位置服務:
GPS定位:經過接收全球定位系統的衛星提供的經緯度座標信息實現位置服務,精度是最高的,一般在10米之內,在時間和電量的消耗上也是最高的。
網絡定位:經過移動通訊的基站信號差別來計算出手機所在的位置,精度比GPS定位差不少,一般在幾百米範圍內。
被動定位:最省電的定位服務,若是應用使用被動定位服務,這個應用會等待手機中其餘應用、服務或者系統組件發出定位請求,並和這些組件的監聽器一塊兒接收位置更新。
正確有限地使用位置服務器,減小應用耗電量。因此在代碼中使用位置服務時,須要注意:
有沒有及時註銷位置監聽器:長時間的監聽位置更新會耗費大量的電量,經過能夠選擇在頁面的onPasuse中進行註銷操做,更好用且全局有效的作法是禁用位置監聽器。
位置更新監聽頻率的設定:根據具體的業務需求設置一個合適的更新頻率值,一般須要在定位精度和耗電量之間綜合考慮。
多種位置服務的選擇:綜合考慮應用的具體需求在不一樣時機採用不一樣的定位服務或者選擇第三方的定位SDK。
4.AlarmManager:
AlarmManager的喚醒操做是比較耗電的,一般狀況下須要保證兩次喚醒操做的時間間隔不要過短,在不須要使用喚醒功能的狀況下儘早取消AlarmManager,不然應用會一直處於耗電狀態。
5.WakeLock:
使用WakeLock時,須要切記及時釋放鎖,並且一般狀況下,要儘早地釋放WakeLock。保持屏幕常量
在屏幕關閉以後,系統休眠,一些任務可能會被暫停(Timer、Handler、Thread、Service),可是某些狀況下咱們須要保持屏幕常量,或者不須要屏幕常量可是須要CPU一直執行,直到任務的執行完成,那麼咱們能夠手動設置屏幕常亮!//在Acitivty裏面使用Flaghtml
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); FLAG_KEEP_SCREEN_ON的好處是使用方便,不要額外的權限!android
Android爲了節省電量,會在用戶無操做一段時間以後進入休眠狀態。Wake Lock是一種鎖的機制,只要有人拿着這個鎖,系統就沒法進入休眠。一些App爲了能在後臺持續作事情,就會持有一個WakeLock,那麼手機就不會進入休眠狀態,App要作的事情能作了,可是也更加耗電。web
衆所周知,在android系統的耗電量排行裏,cpu的耗電佔 了比較大的一部分比例,也就是說,cpu的使用率和使用頻率將直接或間接的影響電量的分配和使用,但很遺憾,android-sdk中沒有爲 android的開發者提供相似cpu管理的功能,可是當下不少省電類應用或專業的cpu管理軟件都提供了cpu的降頻甚至是超頻的功能。緩存
Android應用開發中,不免會遇到service開發。android中服務是運行在後臺的東西,級別與activity差很少。既然說service是運行在後臺的服務,那麼它就是不可見的,沒有界面 的東西。Service和其餘組件同樣,都是運行在主線程中,所以不能用它來作耗時的請求或者動做。你能夠在服務中開一一個線程,在線程中作耗時動做。服務器
咱們從三個方面來淺析一下service的省電開發網絡
假如一個service工做完成,可是來不及關掉或者kill掉,用戶又看不見,因此這個service將會一直在後臺運行,勢必耗電。因此咱們能夠下降某些不經常使用service進程的優先級,在系統內存吃緊的狀況下, 進程優先級低的service容易被系統kill掉。除此以外,能夠利用監聽系統廣播來判斷service狀態是否存活,死亡便可手動kill掉。多線程
普通服務一旦啓動以後,就會一直處於運行狀態,必須調用stopService()或者stopSelf()方法才能讓服務中止下來。爲了簡單的建立一個異步的、會自動挺值得服務,Android專門提供了一個IntentService類。IntentService在運行完畢後自動中止,減小耗電量。異步
Service不必一直在後臺運行,這時候的定時任務顯得很重要。Android的定時任務有兩種實現方式,Timer類和Alarm機制。Timer有一個明顯的短板,不適合長期後臺運行的定時任務。爲了能讓電池更加耐用,每種手機都會有本身的休眠策略,Android手機就會在長時間不操做的狀況下自動讓CPU進入到睡眠狀態,這就有可能致使Timer中的定時任務沒法正常運行。而Alarm機制則不存在這種狀況,它具備喚醒CPU的功能,便可以保證每次須要執行定時任務的時候CPU能正常工做。重點來了:從Android 4.4以後,Alarm任務的觸發時間將會變得不許確,有可能會延遲一段時間後任務才能獲得執行。這不是bug,而是系統在耗電性方面進行的優化。系統會自動檢測目前有多少Alarm任務存在,而後將觸發時間將近的幾個任務放在一塊兒執行,這就能夠大幅度的減小CPU被喚醒的次數,從而有效延長電池的使用時間。性能
除了常規的異步網絡、多線程技術、本地緩存等等以外,Android省電開發還有一個重要的方面是:wifi比蜂窩數據,包括2G(GPRS)、3G更省電:a)儘可能在Wi-Fi下傳輸數據,固然這是廢話,不過能夠考慮在有Wi-Fi的時候作預加載,好比應用中心的zip包、手Q web類應用的離線資源等;b)非Wi-Fi下,儘可能減小網絡訪問,每一次後臺交互都要考慮是否必須。雖然WiFi接入方式已經佔到移動互聯網用戶的50%,可是是有些手機設置爲待機關閉WiFi鏈接,即使有Wi-Fi信號也只能切換到蜂窩數據;測試
看了一篇博文,上面數據測試,也不知道正確與否,可是能說明必定的問題。滅屏狀況:滅屏傳輸,高負載download的時候WiFi最省電(70mA),3G(270mA)和2G(280mA)至關,是WiFi的4倍左右;亮屏狀況:亮屏傳輸,高負載download的時候WiFi最省電(280mA),3G(360mA)和2G(370mA)至關,是WiFi的1.3倍左右;因此在Android應用省電開發中,咱們能夠在獲取網絡方式的方面加以考慮。
最新的安卓4.4系統中引入了全新的ART模式嗎,相比以前流行已久的Dalvik模式有了很大的改變。所以LZ爲你們製做瞭如下這張ART模式和Dalvik模式區別對比圖表,經過對比,能夠一眼看出 ART模式和Dalvik模式之間的區別。
這篇博客寫的很好http://www.cnblogs.com/shaweng/p/3811461.html
在Dalvik中,應用每次運行,字節碼都須要經過即時編譯器轉換爲機器碼,這回拖慢應用的運行效率,而在ART環境中,應用在第一次安裝時,字節碼就會預先編譯成機器碼,使其成爲了真正的本地應用。這個過程叫作預編譯。這樣的話,應用的啓動和執行都會變得更加快速。可是ART的缺點是預編譯完的機器人佔用了更大的存儲空間,應用的安裝須要更長的時間。可是犧牲空間時間換取省電速度,在Android應用中仍是能夠接受的,畢竟性能的提高,運行速度的變快,體驗更流暢,電池續航更久顯得更重要。
經測試,谷歌最新的Android L系統與上一版本相比續航能力能夠提高36%。
Android 5.0的亮點http://lib.91.com/comments/141029/21755059.html
過去,若是開發人員想經過後臺調取服務器數據,或完成某些處理工做,應用程序必須先監聽是否有事件正在發生,併爲本身設定一個喚醒時間,一旦應用程序開始運行,他須要檢查各類環境條件,以肯定是否具有條件讓它完成工做,仍是須要稍後再試,這種方式不只複雜,並且容易出錯,它會不斷的浪費資源,好比當 一個應用程序被喚醒後,發現條件不符合就只能去睡覺併爲下次喚醒再次設定時間,這是一個反覆的過程。
這個問題,將引用JobScheduler來修復,它做爲一個調度應用程序,負責當應用程序被喚醒時,提供適當的運行環境,因此開發者不用再讓程序檢測環境是否符合需求,開發人員只須要按照標準的流程來,調度程序會自動爲喚醒的程序,準備好運行環境。應用程序可使用這個調度程序,來喚醒他們,好比當設備鏈接到充電器後,調度程序將喚醒那些須要處理器工做的程序,讓他們進行工做,或者在設備鏈接至WiFi網絡的時候上傳下載照片,更新內容等。該調度程序還支持一個時間窗口,以便它能夠喚醒一組應用程序,這將使那些不須要精確喚醒時間,但每隔一兩小時須要運行一次的程序能在同一時間點運行,這樣就能讓處理器保持更長時間的休眠。
JobScheduler的優點至關巨大,它不只能夠幫助手機節省電量, 實際因爲不在須要監聽,更改和設置報警,還能夠幫助開發人員減小代碼書寫量。目前該JobScheduler類,已經加入Android L開發者預覽版。
(1) 全新的Material Design風格用戶界面;
新的用戶界面更加簡潔、色彩更加豐富。動畫效果更加合理生動,同時加入實時陰影的3D視圖,更多的使用卡片風格的顯示效果。全平臺風格也變得更爲統一。
(2) 新的通知消息系統;
容許用戶管理通知中心中的通知消息。原先的Android通知欄幾乎是處於沒法控制的狀態,全部的應用通知都會彈出,要想關閉只能進到每個應用中去單獨設置,或是使用第三方軟件來實現統一管理。可是如今不用了,Android 5.0已經自帶了通知管理界面。
(3) 多任務界面有着全新的Google Now卡片風格;
通知中心融入更多的卡片式風格,即便是在鎖屏狀態下也能夠進行多種功能操做。同時用戶能夠自定義通知的優先級別,使得用戶不會錯過任何重要的通知。還能夠設置特定的通知權限,只有被容許的通知消息纔會推送。同時還具備操做性,好比用戶在遊戲時有電話打入,不會以全屏顯示,而是彈出可操做的通知卡片,用戶可選擇接聽或拒接,不影響遊戲繼續進行。
(4) Project Volta省電模式、BatterySaver省電模式;
Android 5.0的省電模式是經過JobSchedulerAPI以及自動調節屏幕亮度、刷新率來達到省電的效果,並且還使用了Project Volta量化每一個應用的耗電量,在手機快沒電的狀況下主動下降CPU的主頻或者關閉通信模塊,以得到更長的待機時間。還配備了一個Battery Bistorian電池歷史記錄功能,可以讓詳細顯示設備的耗電狀況。