Android利用Theme和Style解決APP啟動閃黑屏問題
前幾天Boss就反應說,機器每次啟動程式都會閃一下黑屏,這個客戶不接受。沒辦法,只能想想怎麼解決,最後找到了下面的方法。閃黑屏的原因主要是我們啟動Activity的時候,需要跑完onCreate和onResume才會顯示介面。也就是說需要處理一些資料後,才會顯示。按照這種思路,是不是我把初始化的工作儘量減少就可以避免黑屏?事實是,就算你onCreate啥都不做,仍然會閃一下黑屏,因為初始化解析介面時需要一定時間。下面是解決辦法:
1、自定義Theme
設定背景圖Theme <style name="Theme.AppStartLoad" parent="android:Theme"> <item name="android:windowBackground">@drawable/ipod_bg</item> <item name="android:windowNoTitle">true</item> </style> //2、設定透明Theme <style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style>
上面我定義了兩種Theme,第一種Theme就是設定一張背景圖。當程式啟動時,首先顯示這張背景圖,避免出現黑屏。第二種Theme是把樣式設定為透明,程式啟動後不會黑屏而是整個透明瞭,等到介面初始化完才一次性顯示出來。下面說說兩種方式的優缺點:
- Theme1 程式啟動快,介面先顯示背景圖,然後再重新整理其他介面控制元件。給人重新整理不同步感覺。
- Theme2 給人程式啟動慢感覺,介面一次性刷出來,重新整理同步。
2、修改AndroidManifest.xml
為了使上面Theme生效,我們需要設定一些Activity的Theme
<application android:allowBackup="true" android:icon="@drawable/ipod_icon" android:label="@string/app_name" android:launchMode="singleTask"> <!-- iPod主介面 --> <activity android:name="com.apical.apicalipod.IPodMainActivity" <!-- 使用上面定義的樣式 mythou--> android:theme="@style/Theme.AppStartLoad" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> //...... </application>
- 可以在Activity裡面增加上面自定義的樣式。另外在Application裡面增加也是可以的,而且是全域性效果。
- 自定義Theme放在 /res/values/styles.xml 裡面。如果沒有這個檔案,自己新增一個即可。
- 如果存在多個Activity切換,中間也可能會存在短暫黑屏問題。原因也是Activity啟動的時候需要初始化載入資料,如果想避免這種情況,可以在你切換的Activity裡面增加上面的樣式。
- 上面兩種樣式都可以避免黑屏。可以實際測試一下你的程式選擇一種效果。
- 這個只是把黑屏避免了,但是如果你程式初始化啟動慢,還是會給人程式啟動慢的感覺。需要自行優化程式初始化過程。
3、Theme屬性詳解
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
<style name="WorkspaceIcon"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> <item name="android:layout_gravity">center</item> <item name="android:gravity">center_horizontal</item> <item name="android:singleLine">true</item> <item name="android:ellipsize">marquee</item> <item name="android:textSize">12sp</item> <item name="android:textColor">#FFF</item> <item name="android:shadowRadius">2.0</item> <item name="android:shadowColor">#B0000000</item> </style>
下面列出兩者區別:
- 樣式用在單獨的View,如:Button、TextView等
- 主題通過AndroidManifest.xml中的<application>和<activity>用在整個應用或者某個 Activity,主題對整個應用或某個Activity存在全域性性影響。
- 如果一個應用使用了主題,同時應用下的view也使用了樣式,那麼當主題與樣式屬性發生衝突時,樣式的優先順序高於主題。
上面就是通過Theme解決程式啟動閃黑屏問題,並且講解了Theme和Style,通過Theme配置,其實還可以做個歡迎頁面。不過我們都希望程式啟動速度越快越好,因此還是需要多多優化自己的程式。
相關文章
- Android中Style和Theme資源Android
- Android中的Style、Theme詳解以及發展史Android
- 如何解決app閃退問題APP
- Android鎖屏黑屏後連續定位問題解決方案Android
- 利用 Arthas 解決啟動 StandbyNameNode 載入 EditLog 慢的問題
- Android 解決表情皮膚和軟鍵盤切換時跳閃的問題Android
- pyinstaller閃退問題解決方法
- mongodb啟動失敗問題解決MongoDB
- 解決ASM無法啟動問題ASM
- hbase啟動失敗問題解決
- win10 自動黑屏重啟如何解決_win10黑屏自動重啟的解決教程Win10
- 看完後徹底搞清楚Android中的 Attr 、 Style 、ThemeAndroid
- 推薦系統中的冷啟動問題和探索利用問題
- 如何解決Windows電腦自動黑屏問題?Windows
- 移動APP卡頓問題解決實踐APP
- BurpSuite Pro2020開啟時一閃而過問題解決UI
- 解決syslog伺服器啟動問題伺服器
- Android之主題(Theme)總結Android
- 解決Linux無法開啟android模擬器問題LinuxAndroid
- VMware15.1以下版本,開啟虛擬機器黑屏的問題解決方法虛擬機
- win10更新後會閃屏黑屏怎麼解決 win10電腦更新後開機桌面一閃一閃黑屏的解決步驟Win10
- 討論TableLayoutPanel載入緩慢和閃爍問題解決方案
- 解決windows10下總是很快自動黑屏進入睡眠問題Windows
- Docker啟動故障問題 no such file or directory解決方法Docker
- Android Activity跳轉閃屏問題Android
- win10 mysql閃退怎麼解決_解決win10 mysql閃退問題Win10MySql
- pyinstaller 生成 exe 的閃退問題解決方案
- 移動APP啟動慢解決實踐APP
- Spring Boot幾種啟動問題的解決方案Spring Boot
- 解決 Ubuntu 在啟動時凍結的問題Ubuntu
- 解決MMM啟動監控報錯的問題
- Android APP 冷啟動流程AndroidAPP
- Android App啟動過程AndroidAPP
- android SDK Manager無法啟動閃退問題(環境變數配置正確,find_java.bat沒問題)Android變數JavaBAT
- QQ音樂 for Linux啟動閃退解決方案(2024)Linux
- vue渲染時閃爍{{}}的問題及解決方法Vue
- [已解決]Mac下Anaconda-Navigator閃退問題Mac
- Xcode10打包的App在iOS 9上閃退問題的解決方案XCodeAPPiOS
- Android 解決BottomSheetDialog 拖曳衝突問題Android