android 性能優化-電量篇


消耗電量的幾個主要原因、功能:
1、大數據量的網絡傳輸(網絡)
2、不停的網絡切換(網絡)
3、解析大量的數據(CPU)

 

關於網絡方面的優化:

1、網絡請求之前,檢查網絡連接。沒有網絡連接不進行請求
2、判斷網絡類型,針對特定的數據在特定的網絡下請求。例如:大量數據傳輸的時候,在wifi下請求。wifi下下載數據耗電量只有2、3、4G的1/3.
3、使用效率高的解析工具。根據具體業務數據量的大小,選擇合適的解析工具。例如android上面的協議解析一般推薦json。
4、使用GZIP壓縮方式下載數據,能減少網絡流量,縮短下載時間
5、合理使用緩存,避免重復操作
6、使用推送,代替循環請求
7、觸發網絡請求的操作,每次都會保持無線信號持續一段時間,我們可以把零散的網絡請求打包進行一次操作,避免過多的無線信號引起的電量消耗。
8、是JobScheduler API所做的事情。它會根據當前的情況與任務,組合出理想的喚醒時間,例如等到正在充電或者連接到WiFi的時候,或者集中任務一起執行。我們可以通過這個API實現很多免費的調度算法。

 

 控件:

1、對於自定義控件,我們可以通過canvas.clipRect()來幫助系統識別那些可見的區域。這個方法可以指定一塊矩形區域,只有在這個區域內才會被繪制,其他的區域會被忽視。
2、避免嵌套太多層控件
3、合理使用include、merge

 

GC相關優化:

1、android的GC機制:Android里面是一個三級Generation的內存模型,最近分配的對象會存放在Young Generation區域,當這個對象在這個區域停留的時間達到一定程度,它會被移動到Old Generation,最后到Permanent Generation區域。
2、執行GC操作的時候,任何線程的任何操作都會需要暫停,等待GC操作完成之后,其他操作才能夠繼續運行。
3、Android系統里面有一個Generational Heap Memory的模型,系統會根據內存中不同的內存數據類型分別執行不同的GC操作。例如,最近剛分配的對象會放在Young Generation區域,這個區域的對象通常都是會快速被創建並且很快被銷毀回收的,同時這個區域的GC操作速度也是比Old Generation區域的GC操作速度更快的。
4、避免GC頻繁操作:
  a、避免內存抖動;Memory Churn內存抖動,內存抖動是因為大量的對象被創建又在短時間內馬上被釋放。
  b、
  • 瞬間產生大量的對象會嚴重占用Young Generation的內存區域,當達到閥值,剩余空間不夠的時候,也會觸發GC。即使每次分配的對象占用了很少的內存,但是他們疊加在一起會增加Heap的壓力,從而觸發更多其他類型的GC。這個操作有可能會影響到幀率,
  •     並使得用戶感知到性能問題。

   c、避免在for循環,onDraw中創建對象,無法避免的可以創建對象池,然后在不使用的時候釋放

5、主動回收java對象,特別是較大的,例如bitmap。減少GC的工作頻率

 

其他:

1、盡量不要使用浮點運算
2、定位可以使用wifi和移動網絡基站,不要使用GPS。

 

參考:

http://www.cnblogs.com/hanyonglu/p/4244035.html


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM