天天看點

Android 啟動APP黑屏解決方案

#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屬性之間關系的錯綜複雜,繼承來繼承去的。。。為什麼會出現這種問題,不過還好無意間找到了解決辦法

Android 啟動APP黑屏解決方案

<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為

Android 啟動APP黑屏解決方案

<style name="Animation.Activity.Translucent.Style" parent="@android:style/Animation.Translucent">  

然後讓apptheme的

Android 啟動APP黑屏解決方案

android:windowAnimationStyle為上面的style  

Android 啟動APP黑屏解決方案

如果想在所有的activity切換時候使用該theme,可以配置application,也可以單個單個配置在activity裡面。

當然首頁退出的時候可以單獨配置MainActivity的退出動畫和進入動畫

Android 啟動APP黑屏解決方案

<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