#Android 啟動APP黑屏解決方案#
1、自定義Theme
上面定義了兩種Theme,第一種Theme就是設定一張背景圖。當程式啟動時,首先顯示這張背景圖,避免出現黑屏。第二種Theme是把樣式設定為透明,程式啟動後不會黑屏而是整個透明了,等到界面初始化完才一次性顯示出來。下面說說兩種方式的優缺點:
Theme1 程式啟動快,界面先顯示背景圖,然後再重新整理其他界面控件。給人重新整理不同步感覺。
Theme2 給人程式啟動慢感覺,界面一次性刷出來,重新整理同步。
2、修改AndroidManifest.xml
為了使上面Theme生效,我們需要設定一些Activity的Theme
可以在Activity裡面增加上面自定義的樣式。另外在Application裡面增加也是可以的,而且是全局效果。
自定義Theme放在 /res/values/styles.xml 裡面。如果沒有這個檔案,自己添加一個即可。
如果存在多個Activity切換,中間也可能會存在短暫黑屏問題。原因也是Activity啟動的時候需要初始化加載資料,如果想避免這種情況,可以在你切換的Activity裡面增加上面的樣式。
上面兩種樣式都可以避免黑屏。可以實際測試一下你的程式選擇一種效果。
這個隻是把黑屏避免了,但是如果你程式初始化啟動慢,還是會給人程式啟動慢的感覺。需要自行優化程式初始化過程。
3、Theme屬性詳解
4、Theme和Style
Android裡面除了Theme外還有Style,例如下面是Launcher裡面配置workspace的一個Style
Style可以了解為一組屬性集合,友善不同的View設定使用,我們在View裡面使用Style的時候,跟使用Theme是一樣的應用方法。那麼Style和Theme有什麼差別?下面列出兩者差別:
樣式用在單獨的View,如:Button、TextView等
主題通過AndroidManifest.xml中的<application>和<activity>用在整個應用或者某個 Activity,主題對整個應用或某個Activity存在全局性影響。
如果一個應用使用了主題,同時應用下的view也使用了樣式,那麼當主題與樣式屬性發生沖突時,樣式的優先級高于主題。
上面就是通過Theme解決程式啟動閃黑屏問題,并且講解了Theme和Style,通過Theme配置,其實還可以做個歡迎頁面。不過我們都希望程式啟動速度越快越好,是以還是需要多多優化自己的程式。
=====================================================================================================
但是問題有出現了,原先在配置了activity的切換動畫效果,設定完android:windowIsTranslucent=true之後切換動畫失效了。暫時我也不知道android系統的theme屬性之間關系的錯綜複雜,繼承來繼承去的。。。為什麼會出現這種問題,不過還好無意間找到了解決辦法
<style name="AppTheme" parent="AppBaseTheme">
<!-- <item name="android:windowAnimationStyle">@style/Animation.Activity.Style</item> -->
<item name="android:windowAnimationStyle">@style/Animation.Activity.Translucent.Style</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
<style name="Animation.Activity.Style" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/base_slide_right_in</item>
<item name="android:activityOpenExitAnimation">@anim/base_stay_orig</item>
<item name="android:activityCloseEnterAnimation">@anim/base_stay_orig</item>
<item name="android:activityCloseExitAnimation">@anim/base_slide_right_out</item>
<item name="android:taskOpenEnterAnimation">@anim/base_slide_right_in</item>
<item name="android:taskOpenExitAnimation">@anim/base_stay_orig</item>
<item name="android:taskCloseEnterAnimation">@anim/base_stay_orig</item>
<item name="android:taskCloseExitAnimation">@anim/base_slide_right_out</item>
<item name="android:taskToFrontEnterAnimation">@anim/base_slide_right_in</item>
<item name="android:taskToFrontExitAnimation">@anim/base_stay_orig</item>
<item name="android:taskToBackEnterAnimation">@anim/base_stay_orig</item>
<item name="android:taskToBackExitAnimation">@anim/base_slide_right_out</item>
<style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">
<item name="android:windowEnterAnimation">@anim/base_slide_right_in</item>
<item name="android:windowExitAnimation">@anim/base_slide_right_out</item>
配置style繼承的parent為
<style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">
然後讓apptheme的
android:windowAnimationStyle為上面的style
如果想在所有的activity切換時候使用該theme,可以配置application,也可以單個單個配置在activity裡面。
當然首頁退出的時候可以單獨配置MainActivity的退出動畫和進入動畫
<style name="Animation.Activity.Translucent.Style.Main" parent="@android:style/Animation.Translucent">
<item name="android:windowExitAnimation">@anim/slide_right_out</item>
MainActivity的退出和進入動畫可以引用系統提供的,但是好像在style裡面配置引用不了有些系統的anim,
在檔案夾sdk\platforms\android-20\data\res下面,activity_open_enter.xml,activity_close_exit.xml可以直接拷貝到項目中,修改
單獨寫一個進入或者退出,然後其它預設。。。。。。。
參考:http://blog.csdn.net/dyllove98/article/details/9360113
http://blog.csdn.net/fancylovejava/article/details/39643449