Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之解決APP啟動白屏或者黑屏閃現的問題

Android開發之解決APP啟動白屏或者黑屏閃現的問題

編輯:關於Android編程

在做搜芽的過程中,發現那個外包人緣做的不行,因為啟動的時候會停頓,然後白屏一會,聯想到幾個月前我在我的三僚企業通信軟件裡面拉起9K-Mail的時候也會黑屏,所以決定學習一下。解決一下。這不,萬能的網絡還是非常有用的。

 

歡迎頁啟動的線程由於請求和處理的數據量過大而,導致歡迎頁在出現之前界面上會有一個短暫的白色閃屏停留,當然白色閃屏的停留是因為 application 的主題樣式android:theme=@style/AppTheme 使用了 Theme.Light 題導致的,Light 樣式的 windowBackground、colorBackground、colorForeground 等屬性的值均為 light 也就是白色偏亮,所以才會出現白色閃屏。下面是我的 APP 出現白色閃屏時樣式引用的代碼:

? 1

簡單的修改後,閃屏顏色為黑色,代碼如下:

? 1

代碼修改後引用的樣式為黑色主題,但歡迎頁仍然會有黑色閃屏短暫的停留。繼續進行修改,設置透明屬性為 true,代碼如下:

? 1

經過這次的修改之後黑色閃屏現象消失了,最終達到了自己理想的效果。最後,經過查閱資料發現已經有人總結和處理過這類問題了,並且給出了優缺點的分析,我在這裡以我的理解對其進行引用。

原來避免黑色閃屏有2種方法,分別為:1.為 Theme 設置背景圖;2.為 Theme 設置透明屬性。顯然我采用的是第二種方式,先分別看看這2種方式所引用的代碼:

? 1 ? 1

上面的2種 Theme 中,為 Theme 設置背景圖後程序在啟動的時候,會首先顯示這張圖,避免發生黑屏;為 Theme 設置透明屬性,程序啟動後不會黑屏而是透明,等到界面初始化完成後才一次性顯示出來。下面是兩種方式的優缺點:

  • 為 Theme 設置背景圖 給人程序啟動快的感覺,界面先顯示背景圖,然後再刷新其他界面控件,刷新不同步。
  • 為 Theme 設置透明屬性 給人程序啟動慢的感覺,界面會一次性刷出來,刷新同步。

    但是問題有出現了,原先在配置了activity的切換動畫效果,設置完android:windowIsTranslucent=true之後切換動畫失效了。暫時我也不知道android系統的theme屬性之間關系的錯綜復雜,繼承來繼承去的。。。為什麼會出現這種問題,不過還好無意間找到了解決辦法

     

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    配置style繼承的parent為

     

     

    ? 1 2
    然後讓apptheme的 ? 1 android:windowAnimationStyle為上面的style

     

     

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

     

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

     

    ? 1

     

    MainActivity的退出和進入動畫可以引用系統提供的,但是好像在style裡面配置引用不了有些系統的anim,

    在文件夾sdkplatformsandroid-20data es下面,activity_open_enter.xml,activity_close_exit.xml可以直接拷貝到項目中,修改

    單獨寫一個進入或者退出,然後其它默認。。。。。。。

     

    多動手,測試,如果有錯誤的地方麻煩留言一起交流,謝謝

    另一篇值得看的文章:(http://blog.csdn.net/u012970411/article/details/16981441)

     

    前幾天Boss就反應說,機器每次啟動程序都會閃一下黑屏,這個客戶不接受。沒辦法,只能想想怎麼解決,最後找到了下面的方法。閃黑屏的原因主要是我們啟動Activity的時候,需要跑完onCreate和onResume才會顯示界面。也就是說需要處理一些數據後,才會顯示。按照這種思路,是不是我把初始化的工作盡量減少就可以避免黑屏?事實是,就算你onCreate啥都不做,仍然會閃一下黑屏,因為初始化解析界面時需要一定時間。下面是解決辦法:

    (PS:新建的QQ群,有興趣可以加入一起討論:Android群:322599434)  

    1、自定義Theme

    復制代碼
    
    
    //Edited by mythou
    //http://www.cnblogs.com/mythou/
    //1、設置背景圖Theme
    
    //2、設置透明Theme
    復制代碼

      上面我定義了兩種Theme,第一種Theme就是設置一張背景圖。當程序啟動時,首先顯示這張背景圖,避免出現黑屏。第二種Theme是把樣式設置為透明,程序啟動後不會黑屏而是整個透明了,等到界面初始化完才一次性顯示出來。下面說說兩種方式的優缺點:

    • Theme1 程序啟動快,界面先顯示背景圖,然後再刷新其他界面控件。給人刷新不同步感覺。
    • Theme2 給人程序啟動慢感覺,界面一次性刷出來,刷新同步。

       

      2、修改AndroidManifest.xml

      為了使上面Theme生效,我們需要設置一些Activity的Theme

      復制代碼
      //Edited by mythou
      //http://www.cnblogs.com/mythou/
      
      
      
        
          android:theme=@style/Theme.AppStartLoad
          android:label=@string/app_name >
          
          
          
          
      
      
      //......
      
      
      復制代碼
      • 可以在Activity裡面增加上面自定義的樣式。另外在Application裡面增加也是可以的,而且是全局效果。
      • 自定義Theme放在 /res/values/styles.xml 裡面。如果沒有這個文件,自己添加一個即可。
      • 如果存在多個Activity切換,中間也可能會存在短暫黑屏問題。原因也是Activity啟動的時候需要初始化加載數據,如果想避免這種情況,可以在你切換的Activity裡面增加上面的樣式。
      • 上面兩種樣式都可以避免黑屏。可以實際測試一下你的程序選擇一種效果。
      • 這個只是把黑屏避免了,但是如果你程序初始化啟動慢,還是會給人程序啟動慢的感覺。需要自行優化程序初始化過程。

         

        3、Theme屬性詳解

        復制代碼
        
        
        //Edited by mythou
        //http://www.cnblogs.com/mythou/
        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 //平板風格顯示
        復制代碼

         

        4、Theme和Style

          Android裡面除了Theme外還有Style,例如下面是Launcher裡面配置workspace的一個Style

        復制代碼
        //Edited by mythou
        //http://www.cnblogs.com/mythou/
          
        
        復制代碼

        Style可以理解為一組屬性集合,方便不同的View設置使用,我們在View裡面使用Style的時候,跟使用Theme是一樣的應用方法。那麼Style和Theme有什麼區別?下面列出兩者區別:

        • 樣式用在單獨的View,如:Button、TextView等
        • 主題通過AndroidManifest.xml中的和用在整個應用或者某個 Activity,主題對整個應用或某個Activity存在全局性影響。
        • 如果一個應用使用了主題,同時應用下的view也使用了樣式,那麼當主題與樣式屬性發生沖突時,樣式的優先級高於主題。

            上面就是通過Theme解決程序啟動閃黑屏問題,並且講解了Theme和Style,通過Theme配置,其實還可以做個歡迎頁面。不過我們都希望程序啟動速度越快越好,因此還是需要多多優化自己的程序。

           

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved