昨晚新版本終於發佈了,可是仍是記得有測試反饋app啓動好長時間也沒進入app主頁,因此今天準備加個班總結一下App啓動那些事!android
當啓動應用時,後臺沒有該應用的進程,這時系統會從新建立一個新的進程分配給該應用,這個啓動方式就是冷啓動。冷啓動由於系統會從新建立一個新的進程分配給它,因此會先建立和初始化Application類,再建立和初始化MainActivity類(包括一系列的測量、佈局、繪製),最後顯示在界面上。swift
當啓動應用時,後臺已有該應用的進程(例:按back鍵、home鍵,應用雖然會退出,可是該應用的進程是依然會保留在後臺,可進入任務列表查看),因此在已有進程的狀況下,這種啓動會從已有的進程中來啓動應用,這個方式叫熱啓動。熱啓動由於會從已有的進程中來啓動,因此熱啓動就不會走Application這步了,而是直接走MainActivity(包括一系列的測量、佈局、繪製),因此熱啓動的過程只須要建立和初始化一個MainActivity就好了,而沒必要建立和初始化Application,由於一個應用重新進程的建立到進程的銷燬,Application只會初始化一次。app
經過上面的兩種啓動方式能夠看出app啓動流程爲:異步
Application的構造器方法——>attachBaseContext()——>onCreate()——>Activity的構造方法——>onCreate()——>配置主題中背景等屬性——>onStart()——>onResume()——>測量佈局繪製顯示在界面上佈局
基於上面的啓動流程咱們儘可能作到以下幾點測試
Application
的建立過程當中儘可能少的進行耗時操做SharePreference
,儘可能在異步線程中操做其實顯示黑屏或者白屏實屬正常,這是由於還沒加載到佈局文件,就已經顯示了window窗口背景,黑屏白屏就是window窗口背景。優化
示例:spa
經過設置設置Style線程
(1)設置背景圖Themecode
經過設置一張背景圖。 當程序啓動時,首先顯示這張背景圖,避免出現黑屏
<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)設置透明Theme
經過把樣式設置爲透明,程序啓動後不會黑屏而是整個透明瞭,等到界面初始化完才一次性顯示出來
<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>
二者對比:
(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>
解決後示例:
android:theme="@android:style/Theme.Dialog" //Activity顯示爲對話框模式 android:theme="@android:style/Theme.NoTitleBar" //不顯示應用程序標題欄 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" //不顯示應用程序標題欄,並全屏 android:theme="Theme.Light " //背景爲白色 android:theme="Theme.Light.NoTitleBar" //白色背景並沒有標題欄 android:theme="Theme.Light.NoTitleBar.Fullscreen" //白色背景,無標題欄,全屏 android:theme="Theme.Black" //背景黑色 android:theme="Theme.Black.NoTitleBar" //黑色背景並沒有標題欄 android:theme="Theme.Black.NoTitleBar.Fullscreen" //黑色背景,無標題欄,全屏 android:theme="Theme.Wallpaper" //用系統桌面爲應用程序背景 android:theme="Theme.Wallpaper.NoTitleBar" //用系統桌面爲應用程序背景,且無標題欄 android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" //用系統桌面爲應用程序背景,無標題欄,全屏 android:theme="Theme.Translucent" //透明背景 android:theme="Theme.Translucent.NoTitleBar" //透明背景並沒有標題 android:theme="Theme.Translucent.NoTitleBar.Fullscreen" //透明背景並沒有標題,全屏 android:theme="Theme.Panel " //面板風格顯示 android:theme="Theme.Light.Panel" //平板風格顯示
幹咱們這行,啥時候懈怠,就意味着長進的中止,長進的中止就意味着被淘汰,只能往前衝,直到鳳凰涅槃的一天!