(四)Android 性能優化 Energy Profiler

紙上得來終覺淺,絕知此事要躬行。android

爲何要優化消耗電量 ?

 手機在屏幕喚醒,cpu喚醒,網絡,定位等耗電嚴重,若是應用在非必要場景依然使用的話,很容易形成耗電嚴重,手機發燙等現象。固然也會遭到用戶無情的拋棄……git

爲何要用 energy profiler ?

  • Energy Profiler 可幫助您瞭解應用在哪裏耗用了沒必要要的電量。
  • Energy Profiler 會監控 CPU、網絡無線裝置和 GPS 傳感器的使用狀況,並直觀地顯示其中每一個組件消耗的電量。Energy Profiler 還會顯示可能會影響耗電量的系統事件(喚醒鎖定、鬧鐘、做業和位置信息請求)的發生次數。
  • Energy Profiler 並不會直接測量耗電量,而是使用一種模型來估算設備上每項資源的耗電量。
  • 藉助 Energy Profiler,您能夠輕鬆找到應用使用各項功能的位置,以便您就如何使用各項功能作出明智的決策。

實操體驗

(1)實操環境

 Android Studio 4.0  Gradle version 6.1.1  Android API version 30github

(2)打開路徑

  • profiler打開位置:View -> Tool Windows -> Profiler
  • 固然也能夠直接運行程序並啓用profiler監控:Run -> Profiler

(3)工具預覽

profiler總體概覽

(4)詳情頁面

energy-profiler詳情頁概覽

窗口詳細說明:性能優化

  • 窗口1:性能分類切換按鈕,包括:cpu、memeory、network、energy。
  • 窗口2:頁面調整按鈕集合,包括:縮小,放大、重置、暫停、開始等。
  • 窗口3:事件時間軸,顯示Activity的生命週期不一樣狀態,用戶交互事件,如點擊,旋轉等。
  • 窗口4:顯示應用的估算耗電量(要查看 CPU、網絡和位置信息 (GPS) 資源,以及相關係統事件的具體耗電量狀況,請將鼠標指針放在 Energy 時間軸中的條形上方):

 CPU:cpu工做損耗電量
 Network:網絡通訊損耗電量
 Location:定位功能損耗電量markdown

(5)查看電量損耗

 在時間軸上拖動以選擇要查看的區域網絡

energy-profiler選取片斷查看

對各個窗口進行說明:ide

  • 1.事件時間軸:能夠拖動選擇想分析的數據部分。
  • 2.系統事件時間軸:顯示可能會影響耗電量的系統事件,每一條事件都會顯示一個彩色編碼的條形,以表示系統事件處於活動狀態的時間範圍。條形的不一樣顏色表示不一樣類別的系統事件:

 紅色:喚醒鎖定
 黃色:做業和鬧鐘
 淺紫色:位置信息工具

  • 3.系統事件詳情:雙擊調用堆棧頂部的調用方法條目,跳轉到喚醒鎖定的源代碼。

對上面所提到的系統事件作說明:oop

  • WakeLock(喚醒鎖定):是一種機制,可在設備進入休眠模式時使 CPU 或屏幕保持開啓狀態。例如,播放視頻的應用可使用喚醒鎖定,以便在用戶未與設備交互時使屏幕保持開啓狀態。請求喚醒鎖定不是一項耗電量很高的操做,但未撤消喚醒鎖定會致使屏幕或 CPU 保持開啓狀態的時間超過必要時間,從而加快電池耗電速度。
  • Alarms(鬧鐘):您可使用鬧鐘按期在應用上下文以外運行後臺任務。當鬧鐘觸發時,它可能會喚醒設備並運行耗電量很高的代碼。
  • Jobs(做業):您可使用做業在指定條件下(例如恢復網絡鏈接時)執行相關操做。您可使用 JobBuilder 建立做業,並使用 JobScheduler 對這些做業進行調度。在許多狀況下,建議您使用 JobScheduler 對做業進行調度,而不是使用鬧鐘或喚醒鎖定。
  • Location(位置):位置信息請求使用 GPS 傳感器,這會消耗大量電量。

(6)示例代碼

public class EnergyProfilerActivity extends AppCompatActivity {
    private static final String TAG = "EnergyProfilerActivity";

    private PowerManager.WakeLock mWakeLock;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_energy_profiler);
    }

    public void onEnergyWakeLockAcquire(View view) {
        Log.d(TAG, "onEnergyWakeLockTest: ");
        if (mWakeLock != null) {
            return;
        }
        createWakeLock();
        mWakeLock.acquire();
    }

    public void onEnergyWakeLockRelease(View view) {
        Log.d(TAG, "onEnergyWakeLockRelease: ");
        if (mWakeLock != null) {
            mWakeLock.release();
            mWakeLock = null;
        }
    }

    private void createWakeLock() {
        Log.d(TAG, "createWakeLock: ");
        PowerManager pm = (PowerManager) getBaseContext().getSystemService(POWER_SERVICE);
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getClass().getSimpleName());
    }
}
複製代碼

小編的擴展連接

參考連接

會當凌絕頂,一覽衆山小post

   ❤ 比心 ❤  

相關文章
相關標籤/搜索