編輯:關於Android編程
冷啟動指的是應用第一次啟動或者應用被殺死(不在內存中)後重新啟動的情況。
你可能已經發現了,這種情況下啟動時間會稍長一點。因為它會重新初始化資源(Application等)。
app啟動時通常會在Application或者所謂的SplashActivity中做初始化工作。如果Application中的工作過多的話, 那麼當冷啟動的時候,就會出現白屏
情況,因為此時SplashActivity
還沒有被初始化,SplashActivity
上的圖片還沒有被顯示出來。
我們當然不希望出現白屏
的情況。
解決方案應該從兩方面考慮,1是優化Application
的初始化邏輯,比如該異步的異步,該延遲的延遲。2是將白屏
換成SplashActivity
中展示的圖片,讓用戶有一種應用已經啟動了的錯覺,本文講的就是這種優化方案。
我們需要為SplashActivity
設置一個Theme
,如下:
styles.xml
<style name="AppTheme.Launcher"> <item name="android:windowBackground">@drawable/launch_screen</item> <item name="android:windowFullscreen">true</item> </style>
這個Theme
繼承了app的基礎主題AppTheme
,同時復寫了windowBackground
屬性,它的值即SplashActivity
將展示的圖片(logo等等…)。
launch_screen.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque"> <item android:drawable="@android:color/white"/> <!-- Your product logo - 144dp color version of your app icon --> <item> <bitmap android:src="@drawable/splash_defalut" android:gravity="fill"/> </item> </layer-list>
然後將這個主題設置到SplashActivity
上:
<activity
android:name=".ui.activity.SplashActivity" android:configChanges="fontScale" android:screenOrientation="portrait" android:theme="@style/AppTheme.Launcher" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
</activity>
這還沒有完,因為我們為SplashActivity
多設置了一個背景圖,必然會導致過渡繪制,所以我們在其初始化前,將主題設置回原來的:
@Override protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.AppTheme); super.onCreate(savedInstanceState); setContentView(R.layout.splash_activity);
以上。
現在你會發現即使啟動時間再長,也不會出現白屏
。
1.簡介使用自定義主題或者皮膚,可以將相關配置(顏色、大小等等)放在一個新的apk壓縮文件中,目錄結構保持一致,該apk文件放在任意可以訪問到的目錄即可,類似/syste
廢話不多說了,直接給大家貼代碼了。java類如下: import android.content.Context; import android.content.res.
話不多說先上圖:類似於這樣的效果,很簡單。這是一個listview,item是自定義的view,有兩個特點: 傳入長度,動態改變柱狀圖的長度;根據長度改變色值,
大部分手機上邊都會有一個“MENU”鍵,在一個應用安裝到手機上之後,可以通過“MENU”顯示該應用關聯的菜單。 但是,從Android 3.0開始,Android不再要求