Android將啟動畫面實現遷移到 Android 12 及更高版本

如果在 Android 11 或更低版本中實現自定義啟動畫面,請遷移應用遷移到?SplashScreen?API 以獲取幫助 確保其在 Android 12 及更高版本中正確顯示。

從 Android 12 開始,在所有應用的冷啟動和溫啟動期間,系統都會應用?Android 系統的默認啟動畫面。默認情況下 該系統啟動畫面是使用應用的啟動器圖標元素構建的 以及windowBackground?主題(如果它是單色)。

如果不遷移應用,則 Android 12 和 Android 12 上的應用啟動體驗會受到影響 可能會降級,或出現意外結果。

  • 如果現有的啟動畫面是使用?替換?android:windowBackground?的自定義主題, 系統會將自定義啟動畫面替換為默認的 Android 系統 Android 12 及更高版本上的啟動畫面。這可能不是應用的預期 體驗。

  • 如果現有啟動畫面是使用專用?Activity?實現的,那么在搭載 Android 12 或更高版本的設備上啟動應用會導致系統重復顯示啟動畫面,也就是先顯示系統啟動畫面,接著顯示現有的啟動畫面 activity。

如要避免這類降級或意外體驗,可以完成 遷移過程。遷移完成后,該 API 縮短啟動時間,讓完全掌控啟動畫面體驗, 還能打造與平臺上其他應用更加一致的啟動體驗。

SplashScreen compat 庫

可以直接使用?SplashScreen?API,但我們強烈建議改用?Androidx?SplashScreen?compat 庫。該 compat 庫使用?SplashScreen?API,能夠向后兼容,并可在所有 Android 版本上顯示外觀和風格一致的啟動畫面。本文檔便是基于 compat 庫編寫的。

如果直接使用?SplashScreen?API 進行遷移,在 Android 11 及更低版本上,啟動畫面看起來與遷移前完全一樣。開始日期 Android 12 時,啟動畫面具有 Android 12 的外觀和風格。

如果使用?SplashScreen?compat 庫進行遷移,則系統會顯示 在所有 Android 版本上都應用相同的啟動畫面。

遷移啟動畫面實現

只需完成以下步驟,便可將現有的啟動畫面實現遷移到 Android 12 及更高版本。

此過程適用于要從中遷移的任何類型的實現。如果要從專用?Activity?遷移,請按照本文所述的最佳實踐來調整自定義啟動畫面?ActivitySplashScreen?API 還可減少啟動 延遲。

如需遷移啟動畫面,請執行以下操作:

  1. 在?build.gradle?文件中,更改 compileSdkVersion,并在依賴項中添加?SplashScreen?compat 庫。

    build.gradleandroid {compileSdkVersion 31...
    }
    dependencies {...implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. 創建一個父主題為?Theme.SplashScreen?的主題。將?postSplashScreenTheme?的值設置為?Activity?必須使用的主題,并將?windowSplashScreenAnimatedIcon?的值設置為可繪制對象或帶動畫的可繪制對象。其他屬性可視需要進行設置。

    <style name="Theme.App.Starting" parent="Theme.SplashScreen"><!-- Set the splash screen background, animated icon, and animationduration. --><item name="windowSplashScreenBackground">@color/...</item><!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animateddrawable. One of these is required. --><item name="windowSplashScreenAnimatedIcon">@drawable/...</item><!-- Required for animated icons. --><item name="windowSplashScreenAnimationDuration">200</item><!-- Set the theme of the Activity that directly follows your splashscreen. This is required. --><item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
    

    如果要在圖標下添加背景顏色,可以使用?Theme.SplashScreen.IconBackground?主題及設置?windowSplashScreenIconBackground?屬性。

  3. 在清單中,將啟動 activity 的主題替換為所需的主題。 創建 Deployment

    <manifest><application android:theme="@style/Theme.App.Starting"><!-- or --><activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. 在啟動 activity 中,先調用?installSplashScreen,然后再調用?super.onCreate()

    class MainActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {// Handle the splash screen transition.val splashScreen = installSplashScreen()super.onCreate(savedInstanceState)setContentView(R.layout.main_activity)
    ...

installSplashScreen?會返回啟動畫面對象,可以根據需要使用該對象自定義動畫,或讓啟動畫面在屏幕上顯示更長時間。如需詳細了解如何自定義動畫,請參閱讓啟動畫面在屏幕上顯示更長時間和自定義用于關閉啟動畫面的動畫。

根據啟動畫面調整自定義啟動畫面 activity

遷移到適用于 Android 12 及更高版本的啟動畫面后,請決定如何處理之前的自定義啟動畫面?Activity。可以選擇以下任一方式:

  • 保留自定義 activity,但不讓它顯示。
  • 出于品牌推廣原因保留自定義 activity。
  • 移除自定義 activity,然后根據需要來調整應用。

禁止顯示自定義 activity

如果舊啟動畫面?Activity?主要用于路由,請考慮移除它的方法。例如,可以直接鏈接到 activity 或移至具有子組件的單個 activity。如果 可行,可以使用?SplashScreen.setKeepOnScreenCondition?將路由 activity 保留到位,但使其停止渲染。執行此操作 將啟動畫面傳輸到下一個 activity,并支持流暢 過渡效果。

  class RoutingActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {val splashScreen = installSplashScreen()super.onCreate(savedInstanceState)// Keep the splash screen visible for this Activity.splashScreen.setKeepOnScreenCondition { true }startSomeNextActivity()finish()}...

出于品牌推廣原因保留自定義 activity

如果想出于品牌推廣原因使用之前的啟動畫面?Activity,則可以通過自定義用于關閉啟動畫面的動畫,從系統啟動畫面轉換到自定義啟動畫面?Activity。不過,最好盡可能避免這種情況,并使用?SplashScreen?通過 API 為啟動畫面添加品牌信息。

如果需要顯示對話框,我們建議在后續的自定義啟動畫面 activity 上方或在系統啟動畫面后的主 activity 上方顯示對話框。

移除自定義啟動畫面 activity

通常,我們建議移除之前的自定義啟動畫面?Activity?這樣既能避免重復的啟動畫面,又能提高效率 并縮短啟動畫面加載時間。可以使用以下不同的方法來避免顯示多余的啟動畫面 activity。

  • 對組件、模塊或庫使用延遲加載。避免加載或初始化應用在啟動時不需要的組件或庫。在應用需要時再加載它們。

    如果應用確實需要某個組件才能正常運行,那么請僅在真正需要的時候才加載,而不要在啟動時加載,或者在應用啟動后使用后臺線程進行加載。請盡量讓?Application.onCreate()?輕裝上陣。

    還可以使用?App Startup 庫,用于初始化組件 。執行此操作時,請確保仍然加載所有 啟動 activity 所需的模塊,并且不會在 延遲加載的模塊可供使用

  • 在本地加載少量數據時創建占位符。使用推薦的主題方法,并在應用準備就緒之前暫不顯示。如需實現向后兼容的啟動畫面,請遵循 概述的?讓啟動畫面在屏幕上顯示更長時間。

  • 顯示占位符。對于持續時間不確定的基于網絡的負載: 關閉啟動畫面并顯示異步加載的占位符。 考慮在內容區域應用巧妙的動畫效果來反映加載狀態。務必讓所加載內容的結構與框架結構盡可能保持一致,以便在內容加載后順利過渡。

  • 使用緩存。當用戶首次打開應用時,可以顯示某些界面元素的加載指示標志,如下圖所示。通過 當用戶下次返回應用時,可以在 加載更新的內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/78352.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78352.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/78352.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

692. 前K個高頻單詞(map的練習)

目錄 1、題目分析 2.解題思路 3.代碼實現 4.總結 1、題目分析 2.解題思路 首先它給出我們一個string&#xff0c;讓我們提取出它們中出現次數最多的。利用map將word一個一個存入其中&#xff0c;沒有就插入&#xff0c;有了就1&#xff0c;這樣我們就得到了key_value&#…

如何創建極狐GitLab 議題?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 創建議題 (BASIC ALL) 創建議題時&#xff0c;系統會提示您輸入議題的字段。 如果您知道要分配給議題的值&#xff0c;則可…

day32 學習筆記

文章目錄 前言一、霍夫變換二、標準霍夫變換三、統計概率霍夫變換四、霍夫圓變換 前言 通過今天的學習&#xff0c;我掌握了霍夫變換的基本原本原理及其在OpenCV中的應用方法 一、霍夫變換 霍夫變換是圖像處理中的常用技術&#xff0c;主要用于檢測圖像中的直線&#xff0c;圓…

圖解YOLO(You Only Look Once)目標檢測(v1-v5)

1. YOLO系列整體介紹 YOLO屬于深度學習經典檢測方法中的單階段&#xff08;one - stage&#xff09;類型&#xff0c;與兩階段&#xff08;two - stage&#xff0c;如Faster - rcnn、Mask - Rcnn系列&#xff09;方法相對。 不同模型性能 單階段方法的最核心優勢是速度非常快…

C# 類型、存儲和變量(靜態類型和dynamic關鍵字、可空類型)

本章內容 C#程序是一組類型聲明 類型是一種模板 實例化類型 數據成員和函數成員 預定義類型 用戶定義類型 棧和堆 值類型和引用類型 變量 靜態類型和dynamic關鍵字 可空類型 靜態類型和dynamic關鍵字 你可能巳經注意到了&#xff0c;每一個變量都包括變量類型。這樣編譯器就可…

信奧賽之c++基礎(初識循環嵌套與ASCII密碼本)

?? 游樂園編程奇遇記——循環嵌套與ASCII密碼本 ?? 第一章:摩天輪與旋轉木馬——循環嵌套 ?? 游樂場里的雙重循環 for(int 排數=1; 排數<=3; 排數++){// 外層循環像摩天輪for(int 座位=1; 座位<=5; 座位++){// 內層循環像旋轉木馬cout << "??"…

Spine 動畫教程:皮膚制作

一、前言 擱了很久的抖音直播小玩法開發&#xff0c;最近又讓我想起來了。由于是初次嘗試&#xff0c;所以我將開發費用的預算降到為零。不但不買服務器采用 UnitySDK 的指令直推&#xff0c;而且游戲的資產也用 AI 生成&#xff0c;主打省時又省錢。 但是圖片有了&#xff0…

論文閱讀筆記——π0.5: a Vision-Language-Action Model with Open-World Generalization

π0.5 論文 通過異構數據協同訓練與分層推理&#xff0c;用中等規模的目標數據&#xff08;400小時&#xff09;實現了大規模泛化能力&#xff0c;為現實世界機器人學習提供了新范式。 高層推理(high-level) 根據當前觀測和任務指令預測子任務&#xff08;如“打開抽屜”&…

記錄搭建自己應用中心

記錄搭建自己應用中心 應用架構主應用-管理中心系統文件系統子應用 日志系統日志系統前端日志系統后端 用戶系統接入使用暫未完成 研發管理需求面板消息推送任務分配應用發布 應用架構 一直想做個試試&#xff0c;這是一個簡易版的&#xff0c;主要是整合下知識的&#xff0c;…

【網工第6版】第5章 網絡互聯⑦

目錄 ▲ 路由協議OSPF ◎ OSPF簡介 ◎ OSPF特點 本章重要程度&#xff1a;☆☆☆☆☆ ▲ 路由協議OSPF ◎ OSPF簡介 OSPF(Open Shortest Path First,開放式最短路徑優先協議)是目前應用最廣泛的路由協議。 OSPF是一種內部網關協議IGP&#xff0c;也是鏈路狀態路由協議&am…

5.3 Dify:低代碼平臺,適用于企業快速部署合規AI應用

Dify作為一款開源低代碼平臺&#xff0c;已成為企業快速構建和部署合規AI應用的首選工具。Dify通過整合后端即服務&#xff08;Backend-as-a-Service, BaaS&#xff09;、大型語言模型操作&#xff08;LLMOps&#xff09;以及直觀的視覺化界面&#xff0c;顯著降低了AI應用開發…

AI 編程工具:Augment Code

Meet Augment Agent: Your AI pair programmer that deeply understands your codebase, and learns as you work Augment 是開發人員AI平臺&#xff0c;它可以幫助您理解代碼、調試問題&#xff0c;并更快地發布&#xff0c;因為它了解您的代碼庫。使用聊天、Next Edit和Augme…

vc++ 如何調用poco庫

1. 下載并安裝 Poco 庫 你可以從 Poco 的官方網站&#xff08;POCO C Libraries - Simplify C Development &#xff09;下載其源代碼壓縮包。下載完成后&#xff0c;按照下面的步驟進行編譯和安裝&#xff1a; 解壓源代碼&#xff1a;把下載的壓縮包解壓到指定目錄。配置編譯…

淺談OpenAIClaude LLM Tools的額外配置

前言 https://platform.openai.com/docs/guides/function-calling?api-modechat&strict-modedisabled#additional-configurationshttps://docs.anthropic.com/en/docs/build-with-claude/tool-use/overview#forcing-tool-use tool_choice “none” 就是不用tools&#x…

SystemWeaver詳解:從入門到精通的深度實戰指南

SystemWeaver詳解&#xff1a;從入門到精通的深度實戰指南 文章目錄 SystemWeaver詳解&#xff1a;從入門到精通的深度實戰指南一、SystemWeaver環境搭建與基礎配置1.1 多平臺安裝全流程 二、新手必學的十大核心操作2.1 項目創建全流程2.2 建模工具箱深度解析 三、需求工程與系…

力扣DAY68 | 熱100 | 尋找兩個正序數組的中位數

前言 困難 ○ 這題搞了3天實在太難了&#xff0c;本質就是每次排除k/2個數&#xff0c;直到找到第k個數。 題目 給定兩個大小分別為 m 和 n 的正序&#xff08;從小到大&#xff09;數組 nums1 和 nums2。請你找出并返回這兩個正序數組的 中位數 。 算法的時間復雜度應該為…

Linux常見故障:排查思路與錯誤分析指南

引言 當Linux系統"生病"時&#xff0c;它不會說話但卻會通過各種癥狀"求救"&#x1f198;&#xff01;本文將帶你建立系統化的故障排查思維&#xff0c;從磁盤到內存&#xff0c;從網絡到服務&#xff0c;全方位掌握Linux系統的"把脈問診"技巧。…

深度解析:從12306看混合云架構下的高并發系統設計

作為曾參與12306余票查詢系統高并發升級的技術從業者&#xff0c;筆者注意到公眾對于12306底層技術常存在認知盲區。為破解這一迷思&#xff0c;特此分享十年前的架構解密文獻&#xff08;該技術之前名叫 gemfire 現已晉升為Apache頂級項目Geode&#xff0c;代碼庫詳見&#xf…

華為Pura X的智控鍵:讓折疊機體驗更上一層樓的設計

還記得Mate 70系列剛出那會&#xff0c;我體驗了下智控鍵&#xff0c;那時候就覺得這個“把快捷方式做進電源鍵”的交互方式非常驚艷&#xff0c;沒想到在Pura X上&#xff0c;這種便捷體驗感更上了一層樓。 智控鍵&#xff1a;折疊屏手機的天選快捷方式&#xff1f; 傳統折疊…

springboot如何管理多數據源?

靜態多數據源管理 配置多個數據源 :創建多個數據源的配置類,通常使用 @ConfigurationProperties 注解來綁定配置文件中的數據源屬性,并通過 @Bean 注解定義多個 DataSource Bean 。例如: 配置類: @Configuration public class DataSourceConfig {@Bean(name = "prima…