編輯:關於Android編程
這裡只是使用最簡單的方法對你的app的電量消耗進行評估,如果還想更加詳細或者復雜的方法,可以使用一些比較專用的工具,比如Emmagee(https://github.com/NetEase/Emmagee),這個就很好用。
第一招:看系統的 設置-電池 裡面的耗電排名。
除非你的APP耗電很出格,一用手機就發燙、電量直線往下掉,否則,對於大多數用戶,你到底耗電怎麼樣,主要就是看這個了。
先測測你的靜默耗電:
不要插usb和電源,在不充電的情況下,保持你的app前台或者後台靜默一晚上,也可以根據不同業務場景,多測幾次,然後在 設置-電池 中,看看你的耗電排名,以及進一步點擊看看具體開銷。
再測測你的操作耗電:
步驟一樣,只不過,你可以拿競爭對手或者業內標桿來進行下對比,各正常操作10分鐘,然後再看耗電的排名和具體開銷,相信自己的app耗電在什麼水平上,應該心裡有數了。
第二招:通過adb工具查看各部件的耗電。
手機中的每個部件(CPU、LED、sensor、GPS、3G、wifi 、wakelock等等)運行時對應的能耗值都放power_profile.xml 文件中, 而且系統的設置-->電池-->使用情況中,統計的能耗使用情況也是以power_profile.xml的value 作為基礎參數的。通過命令監控app各部件的使用時長,然後結合設備耗電的基礎參數進行加權計算,即可得到 app 使用的耗電量。操作步驟如下:
1) 拔掉 usb 連接;
2) 操作 app(比如保持前台、後台靜默一段時間);
3) 插上 usb,執行 adb shell dumpsys batteryinfo,找到你的應用對應UID資源使用,如下所示Wake lock GCM_LIB: 24m 41s 316ms長時間使用,導致耗電:
#10062:
Network: 160.39KB received, 150.69KB sent
Wake lock window: 4s 729ms window (2 times) realtime
Wake lock GCM_LIB: 24m 41s 316ms partial (1 times) realtime
Wake lock AlarmManager: 32ms partial (23 times) realtime
TOTAL wake: 24m 41s 348ms partial, 4s 729ms window realtime
Sensor GPS: (not used)
Proc *wakelock*:
CPU: 9s 230ms usr + 9s 470ms krn
Proc com.xxxx.xxxx:
CPU: 1s 120ms usr + 770ms krn
Proc com.xxxx.xxxx::
CPU: 33s 140ms usr + 7s 320ms krn
Apk com.xxxx.xxxx::
Service com.xxxx.xxxx::
Created for: 47m 23s 532ms uptime
Starts: 1, launches: 1
Service com.xxxx.xxxx::
Created for: 15s 910ms uptime
Starts: 19, launches: 19
……
4) 監控app wake lock 類型、次數以及時間,傳感器的使用時間,網絡流量的開銷,各子個進程的 CPU 使用時間;
第三招:觀察cpu開銷
保持前後台靜默的時候,通過命令 adb shell top -d 1 |grep yourapp,可以觀察你的應用相關進程的cpu開銷。
前台靜默時在滾屏、倒計時等不可視的時候,我們期望cpu占用0%。
尤其是後台靜默,一旦超過0%,必然持續耗電,都必須解決。
簡簡單單3招,足以讓你對你的APP的耗電量有個大概的評估,而且,對存在的問題有個大概的定位。
對於無線設備發展到今天的地步,性能越來越不再是問題了,但是,電量卻依然是目前最大的一個瓶頸,你的APP想因為耗電而被用戶“請出”設備嗎?不妨動起來,試試這簡單的三板斧。
1、概述Drawable在我們平時的開發中,基本都會用到,而且給大家非常的有用。那麼什麼是Drawable呢?能夠在canvas上繪制的一個玩意,而且相比於View,並不
android矢量動畫!直接來個例子就明白了!(這裡我把與動畫無關的屬性都用…表示)首先你要有個矢量圖比如這個矢量圖xml文件叫”vector1
轉眼時間一晃就過去了,從事Android開發已有一年多的時間,由於項目忙,一直沒時間更新,雖然筆記做了很多,但是一直沒時間總結,只是把很多開發遇到的坑和知識點記在筆記本。
先給大家展示效果圖:1.新建TestFragmen繼承Fragmentpublic class TestFragment extends Fragment { priv