1. 程式人生 > >Android冷啟動實現APP秒開

Android冷啟動實現APP秒開

在閱讀這篇文章之前,首先要知道,App 啟動分為冷啟動和熱啟動。

點選一個App 圖示的時候會發現有時進入App首頁很快,有時很慢,有時中間還有個白屏。有時中間還有個黑屏。

冷啟動

冷啟動:當啟動應用時,後臺沒有該應用的程序,這時系統會重新建立一個新的程序分配給該應用。

冷啟動的特點:因為系統會重新建立一個新的程序分配給它,所以會建立和初始化Application,在建立和初始化它的Launch Activity(onCreate onMesure onLayout,ondraw),最後展示在介面上

在冷啟動的時間段內發生了什麼?

首先我們要知道當開啟一個Activity的時候發生了什麼,在一個Activity開啟時,如果該Activity所屬的Application還沒有啟動,那麼系統會為這個Activity建立一個程序(每建立一個程序都會呼叫一次Application,所以Application的onCreate()方法可能會被呼叫多次),在程序的建立和初始化中,勢必會消耗一些時間,在這個時間裡,WindowManager會先載入APP裡的主題樣式裡的視窗背景(windowBackground)作為預覽元素,然後才去真正的載入佈局,如果這個時間過長,而預設的背景又是黑色或者白色,這樣會給使用者造成一種錯覺,這個APP很卡,很不流暢,自然也影響了使用者體驗。

熱啟動

熱啟動:當啟動應用時,後臺存在該應用的程序(back鍵,home鍵,應用退出,但是沒有銷燬),從已有的程序中啟動

熱啟動的特點:從已有的程序中啟動,不需要建立和初始化Application ,直接建立和初始化它的Launch Activity

先來看下,未優化和優化後的對比圖:

未優化,冷啟動app會出現短暫的白屏

這裡寫圖片描述

優化方案一:

使用背景圖

這裡寫圖片描述

優化方案二:

使用透明背景

這裡寫圖片描述

消除啟動時的白屏/黑屏

在使用者點選手機桌面APP的時候,看到的黑屏或者白屏其實是介面渲染前的第一幀,如果你看懂了文章頭的那2個問題,那麼解決這個問題就非常輕鬆了,無非就是將Theme裡的windowBackground設定成我們想要讓使用者看到的畫面就可以了,這裡有2種做法:

1、將背景圖設定成我們APP的Logo圖,作為APP啟動的引導,現在市面上大部分的APP也是這麼做的。

<style name="AppWelcome" parent="AppTheme">
        <item name="android:windowBackground">@mipmap/bg_welcome_start</item>
    </style>

2、將背景顏色設定為透明色,這樣當用戶點選桌面APP圖片的時候,並不會”立即”進入APP,而且在桌面上停留一會,其實這時候APP已經是啟動的了,只是我們心機的把Theme裡的windowBackground的顏色設定成透明的,強行把鍋甩給了手機應用廠商(手機反應太慢了啦,哈哈),其實現在微信也是這樣做的,不信你可以試試。

<item name="android:windowIsTranslucent">true</item>

<item name="android:windowFullscreen">true</item>

或者使用同名主題

<style name="Appwelcome" parent="android:Theme.Translucent.NoTitleBar.Fullscreen"/>

二、關於啟動優化

上面的做法其實可以達到”秒開”APP的效果,不過確不是真實的速度,在Activity建立過程中其實是會經過一系列framework層的操作,在日常開發中,我們都會去重寫Application類,然後在Application裡進行一些初始化操作,比如存放使用者標識的靜態化TOKEN,第三方SDK的初始化等。
這裡給出幾點建議:
1、不要讓Application參與業務的操作
2、不要在APPlication進行耗時操作,比如有些開發者會在自己的APP裡一系列資料夾或檔案(比如我自己),這些I/O操作應該放到”確實該使用的時候再去建立”亦或者是資料庫的一些操作。
3、不要以靜態變數的方式在Application中儲存資料等。
4、減少LaunchActivity的View層級,減少View測量繪製時間

當然這是絕對的理想主義,把上面的”不要”2字之前添上”儘量”2字吧,畢竟在實際開發中,這樣做確實會讓我們方便許多。

對了,補充一點,佈局也是很重要的,儘量的去減少佈局的複雜性,佈局深度,因為在View繪製的過程中,測量也是很耗費效能的。

三、如何測量應用啟動時間

android是有命令可以計算啟動時間的

adb shell am start -W [packageName]/[packageName.launchActivity]

那就拿自己的專案來給大家看看上面兩種啟動的時間差別

冷啟動:

這裡寫圖片描述

熱啟動

這裡寫圖片描述

關注我的公眾號,輕鬆瞭解和學習更多技術
這裡寫圖片描述

相關推薦

Android啟動實現APP

在閱讀這篇文章之前,首先要知道,App 啟動分為冷啟動和熱啟動。 點選一個App 圖示的時候會發現有時進入App首頁很快,有時很慢,有時中間還有個白屏。有時中間還有個黑屏。 冷啟動 冷啟動:當啟動應用時,後臺沒有該應用的程序,這時系統會重新建立一個新的

如何在android手機上實現app開機自動執行啟動(可以開啟應用介面)。

測試專案的時候實在一個android系統的車載終端上進行的,因為沒有終端沒螢幕操作起來比較麻煩,所以乾脆把用到的app寫成開機自動執行,就可以了。感覺不是很困難,我就答應了大師兄的這個要求,然後就在網上查詢相關的程式碼。最終找到了這個可以完美執行,不知道是不是有bu

APP

一、所需軟體: 1、安裝adb(不知道如何單獨安裝,o(╯□╰)o聽說sdk下包含了adb,因此去安裝了jdk、sdk。sdk資料夾下的platform-tools中就有adb.exe) 2、安裝模擬器,Genymotion(直接下載包含VirtualBox)如果已有虛擬機器就不用了(安裝後

結合 Google quicklink,react 專案實現頁面

對於前端資訊比較敏感的同學,可能這兩天已經聽說了 GoogleChromeLabs/quicklink 這個專案:它由 Google 公司著名開發者 Addy Osmani 發起,實現了:在空閒時間預獲取頁面可視區域內的連結,加快後續載入速度。 如果你沒有聽說過 Addy Osmani 大神

Android使用Bugly實現APP版本更新

一、Bugly 首先我們來欣賞下Bugly的主頁 那麼我們就愉悅的來接入Bugly 二、匯入 關於Bugly的匯入官方文件寫的很詳細,這裡我們再來一次 1、自動匯入(推薦) (1)gradle配置(路徑app/build.gradle):

Android 使用 DownloadManager 實現APP應用內更新升級

具體實現思路: 我們通過downloaderManager來下載apk,並且本地儲存downManager.enqueue(request)返回的id值,並且通過這個id獲取apk的下載檔案路徑和下載的狀態,並且通過狀態來更新通知欄的顯示。 第一次下載成功,彈出安裝

android 用 SharedPreferences實現app首次使用顯示引導介面,之後使用將不再出現

功能如標題所示,話不多說,程式碼簡單,註釋清晰,一目瞭然: package com.kk.main;import android.content.Intent;import android.content.SharedPreferences;import android.

Android啟動白屏解析,帶你一步步分析和解決問題

本文同步發表於我的微信公眾號,掃一掃文章底部的二維碼或在微信搜尋 郭霖 即可關注,每天都有文章更新。 寫在前面 記得在本月初,我發表了一篇文章叫《 Android Studio新功能解析,你真的瞭解Instant Run嗎?》,裡面詳細講解了

Android 啟動白屏問題

點選上面藍色字型關注“IT大飛說” 置頂公眾號(ID:ITBigFly)第一時間收到推送 今天把玩公司App發現了一個有趣的現象。啟動app白屏。之前沒太留意過;在參照大廠App解決白屏的方案後。簡單彙總一下。 前言 冷啟動:App第

android 7 JobScheduler實現APP保活

JobScheduler:當一系列預置的條件被滿足時,JobScheduler API為你的應用執行一個操作,例如當裝置接通電源介面卡或者連線到WIFI,在API 21 ( Android 5.0(Lollipop) )中,google提供了一個新叫做JobScheduler

android啟動

系列文: 1, 程式碼分析 因為這個App集成了Bugly, Push, Feedback等服務, 所以Application的onCreate有很多第三方平臺的初始化工作... public class GithubApplication extends MultiDexApplication {

Android利用FileDownloader實現APP自動更新並且安裝

在Android中APP自動更新、安裝是必然的,最近呢我們公司也有這樣一個需求開始呢本菜鳥是打算用AppUpdate但是呢看了他的專案後發現真的是個好東西但是我不打算這樣做打算自己來實現更新、安裝。無意之間在一個專案中發現了FileDownloader這個真是

Android API 文件 離線方法

也是最近才看Android開發,但是,它的API文件無論是線上還是離線的,實在是慢得不敢恭維。今天除錯了一下,發現它自己請求了幾個線上的檔案,那幾個檔案因為谷歌被封的原因請求時間比較長。於是就查看了一下網頁原始碼將,這些請求的路徑全部置空,發現開啟速度立馬就上去了。 其實

Android app啟動並避免白屏或黑屏

本篇記錄Android 開發常見的一個優化點:冷啟動優化。冷啟動也就是應用本來沒有啟動,這時我們點選桌面圖示或者使用adb啟動應用。 問題:我們在桌面點選某些app圖示時會感覺卡頓了一下才彈出app啟動頁,或者啟動時先白屏或黑屏一會才顯示啟動頁。這樣給使用者的體驗不太好。

AndroidAPP應用啟動黑白屏原因 優化解決方案

冷啟動 前言 應用啟動 冷啟動流程 問題原因 解決方法 優化 前言 做過APP開發,尤其是複雜專案的同學應該會經歷過APP在桌面點選冷啟動的時候,你以為會順利開啟應用首頁,但是出現在你眼前的

帶你重新認識:Android Splash頁 解決啟動長時間白屏或黑屏的問題

原理 我們之前設定了Window透明,實現了去掉白屏和黑屏,現在要弄一個顏色或者圖片來代替白屏和黑屏,所以首先要把原來style中的透明屬性去掉。然後給Window設定一個背景顏色或者圖片。 實現步驟 1、首先在res/drawable下新建一個layer-list

Android App啟動分析與優化

app的啟動方式:  1.)冷啟動 當啟動應用時,後臺沒有該應用的程序,這時系統會重新建立一個新的程序分配給該應用,這個啟動方式就是冷啟動。冷啟動因為系統會重新建立一個新的程序分配給它,所以會先建立和初始化Application類,再建立和初始化MainActivit

如何不打android stadio 啟動安卓模擬器

準備 vdma lis avd lan 麻煩 list https 開始 在開始準備開發RN時想在android手機上看看效果,於是下載了android studio 每次調試時都要先打開android studio略顯麻煩在往上找到了解決方案 在android sdk目錄

Android實現App版本自動更新

enqueue 返回值 watermark iss 界面 點擊 itl rar 執行 現在很多的App中都會有一個檢查版本的功能。例如鬥魚TV App的設置界面下: 當我們點擊檢查更新的時候,就會向服務器發起版本檢測的請求。一般的處理

android 性能優化 -- 啟動過程 啟動啟動

sdc 視覺 準備 and 接下來 元素 uri word androidm 一、應用的啟動方式   通常來說,啟動方式分為兩種:冷啟動和熱啟動。   1、冷啟動:當啟動應用時,後臺沒有該應用的進程,這時系統會重新創建一個新的進程分配給該應用,這個啟動方式就是冷啟動。