Android App應(yīng)用啟動分析與優(yōu)化
app的啟動方式:
1.)冷啟動
當(dāng)啟動應(yīng)用時,后臺沒有該應(yīng)用的進(jìn)程,這時系統(tǒng)會重新創(chuàng)建一個新的進(jìn)程分配給該應(yīng)用,這個啟動方式就是冷啟動。冷啟動因為系統(tǒng)會重新創(chuàng)建一個新的進(jìn)程分配給它,所以會先創(chuàng)建和初始化Application類,再創(chuàng)建和初始化MainActivity類(包括一系列的測量、布局、繪制),最后顯示在界面上。
2.)熱啟動
當(dāng)啟動應(yīng)用時,后臺已有該應(yīng)用的進(jìn)程(例:按back鍵、home鍵,應(yīng)用雖然會退出,但是該應(yīng)用的進(jìn)程是依然會保留在后臺,可進(jìn)入任務(wù)列表查看),所以在已有進(jìn)程的情況下,這種啟動會從已有的進(jìn)程中來啟動應(yīng)用,這個方式叫熱啟動。熱啟動因為會從已有的進(jìn)程中來啟動,所以熱啟動就不會走Application這步了,而是直接走M(jìn)ainActivity(包括一系列的測量、布局、繪制),所以熱啟動的過程只需要創(chuàng)建和初始化一個MainActivity就行了,而不必創(chuàng)建和初始化Application,因為一個應(yīng)用從新進(jìn)程的創(chuàng)建到進(jìn)程的銷毀,Application只會初始化一次。
app的啟動流程:
通過上面的兩種啟動方式可以看出app啟動流程為:
Application的構(gòu)造器方法——>attachBaseContext()——>onCreate()——>Activity的構(gòu)造方法——>onCreate()——>配置主題中背景等屬性——>onStart()——>onResume()——>測量布局繪制顯示在界面上
app的啟動優(yōu)化:
基于上面的啟動流程我們盡量做到如下幾點(diǎn)
1.Application的創(chuàng)建過程中盡量少的進(jìn)行耗時操作
2.如果用到SharePreference,盡量在異步線程中操作
3.減少布局的層次,并且生命周期回調(diào)的方法中盡量減少耗時的操作
app啟動遇見黑屏或者白屏問題
1.)產(chǎn)生原因
其實(shí)顯示黑屏或者白屏實(shí)屬正常,這是因為還沒加載到布局文件,就已經(jīng)顯示了window窗口背景,黑屏白屏就是window窗口背景。
示例:

2.)解決辦法
通過設(shè)置設(shè)置Style
(1)設(shè)置背景圖Theme
通過設(shè)置一張背景圖。 當(dāng)程序啟動時,首先顯示這張背景圖,避免出現(xiàn)黑屏
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:screenOrientation">portrait</item>
<item name="android:windowBackground">>@mipmap/splash</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
(2)設(shè)置透明Theme
通過把樣式設(shè)置為透明,程序啟動后不會黑屏而是整個透明了,等到界面初始化完才一次性顯示出來
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:screenOrientation">portrait</item>
</style>
兩者對比:
Theme1 程序啟動快,界面先顯示背景圖,然后再刷新其他界面控件。給人刷新不同步感覺。
Theme2 給人程序啟動慢感覺,界面一次性刷出來,刷新同步。
(3)修改AndroidManifest.xml
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true">
<activity android:name=".MainActivity"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
//......
</application>
解決后示例:

3.)常見的Theme主題
android:theme="@android:style/Theme.Dialog" //Activity顯示為對話框模式
android:theme="@android:style/Theme.NoTitleBar" //不顯示應(yīng)用程序標(biāo)題欄
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不顯示應(yīng)用程序標(biāo)題欄,并全屏
android:theme="Theme.Light " //背景為白色
android:theme="Theme.Light.NoTitleBar" //白色背景并無標(biāo)題欄
android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,無標(biāo)題欄,全屏
android:theme="Theme.Black" //背景黑色
android:theme="Theme.Black.NoTitleBar" //黑色背景并無標(biāo)題欄
android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,無標(biāo)題欄,全屏
android:theme="Theme.Wallpaper" //用系統(tǒng)桌面為應(yīng)用程序背景
android:theme="Theme.Wallpaper.NoTitleBar" //用系統(tǒng)桌面為應(yīng)用程序背景,且無標(biāo)題欄
android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系統(tǒng)桌面為應(yīng)用程序背景,無標(biāo)題欄,全屏
android:theme="Theme.Translucent" //透明背景
android:theme="Theme.Translucent.NoTitleBar" //透明背景并無標(biāo)題
android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景并無標(biāo)題,全屏
android:theme="Theme.Panel " //面板風(fēng)格顯示
android:theme="Theme.Light.Panel" //平板風(fēng)格顯示
干我們這行,啥時候懈怠,就意味著長進(jìn)的停止,長進(jìn)的停止就意味著被淘汰,只能往前沖,直到鳳凰涅槃的一天!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android開發(fā)常用標(biāo)簽小結(jié)
這篇文章主要介紹了Android開發(fā)常用標(biāo)簽,分析總結(jié)了Android開發(fā)中常見標(biāo)簽的使用技巧,需要的朋友可以參考下2015-05-05
Android持久化技術(shù)之SharedPreferences存儲實(shí)例詳解
這篇文章主要介紹了Android持久化技術(shù)之SharedPreferences存儲,結(jié)合實(shí)例形式較為詳細(xì)的分析了SharedPreferences存儲的原理、應(yīng)用及具體實(shí)現(xiàn)方法,需要的朋友可以參考下2016-01-01
Android通過多點(diǎn)觸控的方式對圖片進(jìn)行縮放的實(shí)例代碼
這篇文章主要介紹了Android通過多點(diǎn)觸控的方式對圖片進(jìn)行縮放的實(shí)例代碼,完成了點(diǎn)擊圖片就能瀏覽大圖的功能,并且在瀏覽大圖的時候還可以通過多點(diǎn)觸控的方式對圖片進(jìn)行縮放。2018-05-05
Android Studio提示inotify大小不足的解決辦法
大家在使用Android Studio導(dǎo)入AOSP源碼的時候,可能會遇到inotify大小不足的問題,這篇文章就給大家介紹了怎么解決這個問題的方法,有需要的朋友們可以參考借鑒。2016-09-09
Android圖片異步加載框架Android-Universal-Image-Loader
這篇文章主要介紹了Android圖片異步加載框架Android-Universal-Image-Loader,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
使用RecyclerView實(shí)現(xiàn)點(diǎn)贊頭像疊加效果
這篇文章主要為大家詳細(xì)介紹了使用RecyclerView實(shí)現(xiàn)點(diǎn)贊頭像疊加效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-08-08
Android開發(fā) -- UI界面之threme和style
做Java的人一般都做過CSS,我們都知道它也有一個樣式,Android中的樣式也可以進(jìn)行類比。2016-06-06

