日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 启动优化方案,Android 项目优化(五):应用启动优化

發布時間:2025/3/15 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 启动优化方案,Android 项目优化(五):应用启动优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹了前面的優化的方案后,這里我們在針對應用的啟動優化做一下講解和說明。

一、App啟動概述

一個應用App的啟動速度能夠影響用戶的首次體驗,啟動速度較慢(感官上)的應用可能導致用戶再次開啟App的意圖下降,或者卸載放棄該應用程序。

應用程序啟動有主要分為兩種狀態,每種狀態都會影響應用程序對用戶可見所需的時間:冷啟動,熱啟動。

冷啟動:冷啟動表示用戶首次打開應用,這時進程還沒創建,包含了Application創建的過程。冷啟動時間指從第一次用戶點擊Launcher中的應用圖標開始,到首頁內容全部展示出來。

熱啟動:熱啟動表示用戶在首頁按了返回,首頁Activity已經Destroy,不過Application仍在內存中存在,對應的進程并沒有被殺掉,不包含Application創建過程。熱啟動時間指在Application仍然存在的情況下,從用戶點擊桌面圖標,到首頁內容全部展示出來。

注:冷啟動、熱啟動不是官方的定義,而是我們基于用戶的角度考慮的定義。

在冷啟動開始時,系統有三個任務。這些任務是:

加載并啟動應用程序。

啟動后立即顯示應用程序空白的啟動窗口。

創建應用程序進程。

一旦系統創建應用程序進程,應用程序進程就會負責下一階段。這些階段是:

創建App對象

啟動主線程(main thread)

創建應用入口的Activity對象

填充加載布局Views

在屏幕上執行View的繪制過程.measure -> layout -> draw

應用程序進程完成第一次繪制后,系統進程會交換當前顯示的背景窗口,將其替換為主Activity。此時,用戶可以開始使用該應用程序。

這里我們建議始終根據冷啟動的假設進行優化。這樣做也可以改善熱啟動的性能。

二、冷啟動視覺效果優化

上面我們說了,冷啟動的階段執行的操作為:

加載并啟動應用程序

啟動后立即顯示應用程序空白的啟動窗口

創建應用程序進程

現在 App 應用啟動都會先進入一個閃屏頁(LaunchActivity)?來展示應用信息。

系統默認會在啟動應用程序的時候啟動空白窗口?,直到 App 應用程序的入口Activity創建成功,視圖繪制完畢。但是存在的問題就是在進入閃屏頁的時候,會有2秒左右的白屏/灰屏的界面。

為了更順滑無縫銜接我們的閃屏頁,可以在啟動 Activity 的 Theme中設置閃屏頁圖片,這樣啟動窗口的圖片就會是閃屏頁圖片,而不是白屏。配置代碼如下:

@drawable/lunch//閃屏頁圖片true

false

這樣設置的話,就會在冷啟動的時候,展示閃屏頁的圖片,等App進程初始化加載入口 Activity (也是閃屏頁) 就可以無縫銜接。

其實這種方式并沒有真正的加速應用進程的啟動速度,而只是通過用戶視覺效果帶來的優化體驗。

備注:上面的方案適用于閃屏頁為整張圖片為閃屏內容(閃屏頁圖片推薦.9格式,防止拉伸失真)。不適用于閃屏頁為多個元素混合的。后者推薦參考Android 項目優化(二):啟動頁面優化。

三、App冷啟動耗時統計

App冷啟動耗時統計方式主要是:adb 命令統計、系統日志統計。

1. adb 命令統計

adb命令 :?adb shell am start -S -W 包名/啟動類的全限定名?, -S 表示重啟當前應用。示例如下:

C:AndroidDemo>adb shell am start -S -W com.example.moneyqian.demo/com.example.moneyqian.demo.MainActivity

Stopping: com.example.moneyqian.demo

Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.moneyqian.demo/.MainActivity }

Status: ok

Activity: com.example.moneyqian.demo/.MainActivity

ThisTime: 2247

TotalTime: 2247

WaitTime: 2278

Complete

ThisTime : 最后一個 Activity 的啟動耗時(例如從 LaunchActivity - >MainActivity「adb命令輸入的Activity」 , 只統計 MainActivity 的啟動耗時)

TotalTime : 啟動一連串的 Activity 總耗時.(有幾個Activity 就統計幾個)

WaitTime : 應用進程的創建過程 TotalTime .

總結一下 : 如果需要統計從點擊桌面圖標到 Activity 啟動完畢,可以用WaitTime作為標準,但是系統的啟動時間優化不了,所以優化冷啟動我們只要在意?ThisTime?即可。

2.?系統日志統計

根據系統日志來統計啟動耗時,在Android Studio中查找已用時間,必須在logcat視圖中禁用過濾器(No Filters)。因為這個是系統的日志輸出,而不是應用程序的。

比如我們可以通過過濾displayed輸出的啟動日志. 示例如下:

四、冷啟動 Application 優化

我們知道有很多第三方組件(包括App應用本身)都在 Application 中完成初始化操作。但是在 Application 中完成繁重的初始化操作和復雜的邏輯就會影響到應用的啟動性能。

通過分析一下,我們可以知道還是有機會優化這些工作以實現冷啟動的性能改進的,分析后發現影響冷啟動時間的常見問題如下:

復雜繁瑣的布局初始化

阻塞主線程 UI 繪制的操作,如 I/O 讀寫或者是網絡訪問.

其它占用主線程的操作

我們可以根據這些組件的輕重緩急之分,對初始化做一下分類 :

必要的組件一定要在主線程中立即初始化(入口 Activity 可能立即會用到)

組件一定要在主線程中初始化,但是可以延遲初始化。

組件可以在子線程中初始化。

在進行優化的時候,需要注意以下幾種情況:

放在子線程的組件初始化建議延遲初始化,這樣就可以了解是否會對項目造成影響!

將需要在主線程中初始化但是可以不用立即完成的動作延遲加載(初始化放在 Application 中統一管理為妙,不建議放在Activity里面)

可以嘗試將常見的組件庫,例如 Bugly,x5內核初始化,SP的讀寫,友盟等組件放到子線程中初始化。(子線程初始化不能影響到組件的使用)

在優化好啟動時間后,我們就可以在針對閃屏頁的時間,進行調整優化,具體公式為:

閃屏頁展示總時間 = 組件初始化時間 剩余展示時間

總結

以上是生活随笔為你收集整理的android 启动优化方案,Android 项目优化(五):应用启动优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。