หากคุณใช้หน้าจอแนะนําที่กําหนดเองใน Android 11 หรือเวอร์ชันก่อนหน้า ให้ย้ายข้อมูลแอปไปยัง SplashScreen
API เพื่อช่วยให้แอปแสดงผลอย่างถูกต้องใน Android 12 ขึ้นไป
ตั้งแต่ Android 12 เป็นต้นไป ระบบจะใช้หน้าจอ Splash เริ่มต้นของระบบ Android กับการเริ่มต้นตั้งแต่ต้นและการเริ่มต้นแบบอุ่นเครื่องสำหรับแอปทั้งหมด โดยค่าเริ่มต้น
หน้าจอเริ่มต้นของระบบนี้จะสร้างขึ้นโดยใช้องค์ประกอบไอคอน Launcher ของแอป
และwindowBackground
ของธีม
หากเป็นสีเดียว
หากไม่ย้ายข้อมูลแอป ประสบการณ์การเปิดตัวแอปใน Android 12 และ เวอร์ชันที่ใหม่กว่าอาจลดลงหรือมีผลลัพธ์ที่ไม่คาดคิด
หากหน้าจอแนะนําที่มีอยู่ใช้ธีมที่กําหนดเองซึ่งลบล้าง
android:windowBackground
ระบบจะแทนที่หน้าจอแนะนําที่กําหนดเองด้วยหน้าจอแนะนําเริ่มต้นของระบบ Android ใน Android 12 ขึ้นไป ซึ่งอาจไม่ใช่ประสบการณ์การใช้งานที่แอปของคุณตั้งใจมอบให้หากคุณใช้หน้าจอแนะนําที่มีอยู่โดยใช้
Activity
, การเปิดแอปในอุปกรณ์ที่ใช้ Android 12 ขึ้นไปจะทำให้ มีหน้าจอแนะนําซ้ำกัน ดังนี้ หน้าจอแนะนําของระบบ จะแสดงตามด้วยกิจกรรมหน้าจอแนะนําที่มีอยู่
คุณสามารถป้องกันไม่ให้เกิดประสบการณ์การใช้งานที่ด้อยลงหรือไม่เป็นไปตามที่ต้องการได้โดยทำตาม กระบวนการย้ายข้อมูลที่อธิบายไว้ในเอกสารนี้ หลังจากย้ายข้อมูลแล้ว API จะ ปรับปรุงเวลาเริ่มต้น ให้คุณควบคุมประสบการณ์หน้าจอเริ่มต้นได้อย่างเต็มที่ และสร้างประสบการณ์การเปิดแอปที่สอดคล้องกันมากขึ้นกับแอปอื่นๆ ในแพลตฟอร์ม
ไลบรารี SplashScreen Compat
คุณใช้ SplashScreen
API ได้โดยตรง แต่เราขอแนะนำอย่างยิ่งให้ใช้
ไลบรารีความเข้ากันได้ของ SplashScreen
Androidx
แทน ไลบรารีความเข้ากันได้ใช้ SplashScreen
API, เปิดใช้
ความเข้ากันได้แบบย้อนหลัง และสร้างรูปลักษณ์ที่สอดคล้องกันสำหรับหน้าจอ
แนะนําที่แสดงใน Android ทุกเวอร์ชัน เอกสารนี้เขียนขึ้นโดยใช้ไลบรารี compat
หากคุณย้ายข้อมูลโดยใช้ SplashScreen
API โดยตรงใน Android 11 และเวอร์ชันก่อนหน้า
หน้าจอ Splash จะดูเหมือนเดิมทุกประการก่อนการย้ายข้อมูล ตั้งแต่ Android 12 เป็นต้นไป หน้าจอแนะนําจะมีรูปลักษณ์และความรู้สึกแบบ Android 12
หากย้ายข้อมูลโดยใช้SplashScreen
ไลบรารีความเข้ากันได้ ระบบจะแสดง
หน้าจอเริ่มต้นเดียวกันใน Android ทุกเวอร์ชัน
ย้ายข้อมูลการติดตั้งใช้งานหน้าจอแนะนำ
ทําตามขั้นตอนต่อไปนี้เพื่อย้ายข้อมูลการใช้งานหน้าจอ Splash ที่มีอยู่ไปยัง Android 12 ขึ้นไป
กระบวนการนี้ใช้กับการติดตั้งใช้งานประเภทใดก็ตามที่คุณย้ายข้อมูล
จาก หากคุณย้ายข้อมูลจาก Activity
เฉพาะ ให้ทำตามแนวทางปฏิบัติ
แนะนำที่อธิบายไว้ในเอกสารนี้เพื่อปรับหน้าจอ
สแปลชที่กำหนดเอง Activity
SplashScreen
API ยังช่วยลดเวลาในการตอบสนองของการเริ่มต้น
ซึ่งเกิดขึ้นกับกิจกรรมหน้าจอแนะนำโดยเฉพาะด้วย
หากต้องการย้ายข้อมูลหน้าจอเริ่มต้น ให้ทำดังนี้
ในไฟล์
build.gradle
ให้เปลี่ยนcompileSdkVersion
และรวม ไลบรารีSplashScreen
compat ไว้ในทรัพยากร Dependencybuild.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
สร้างธีมที่มีธีมหลักเป็น
Theme.SplashScreen
กำหนดค่าของpostSplashScreenTheme
เป็นธีมที่Activity
ต้องใช้ และค่าของwindowSplashScreenAnimatedIcon
เป็น Drawable หรือ Animated Drawable ส่วนแอตทริบิวต์อื่นๆ จะเป็นแอตทริบิวต์ที่ไม่บังคับ<style name="Theme.App.Starting" parent="Theme.SplashScreen"> <!-- Set the splash screen background, animated icon, and animation duration. --> <item name="windowSplashScreenBackground">@color/...</item> <!-- Use windowSplashScreenAnimatedIcon to add a drawable or an animated drawable. 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 splash screen. This is required. --> <item name="postSplashScreenTheme">@style/Theme.App</item> </style>
หากต้องการเพิ่มสีพื้นหลังใต้ไอคอน ให้ใช้
Theme.SplashScreen.IconBackground
ธีมและตั้งค่าแอตทริบิวต์windowSplashScreenIconBackground
ในไฟล์ Manifest ให้แทนที่ธีมของกิจกรรมเริ่มต้นด้วยธีมที่คุณ สร้างในขั้นตอนก่อนหน้า
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting"> ...
เรียกใช้
installSplashScreen
ในกิจกรรมเริ่มต้นก่อนโทรsuper.onCreate()
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { // Handle the splash screen transition. val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) ...
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // Handle the splash screen transition. SplashScreen splashScreen = SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); } }
installSplashScreen
จะแสดงออบเจ็กต์หน้าจอแนะนำ ซึ่งคุณเลือกใช้เพื่อปรับแต่งภาพเคลื่อนไหวหรือแสดงหน้าจอแนะนำบนหน้าจอให้นานขึ้นได้
ดูรายละเอียดเพิ่มเติมเกี่ยวกับการปรับแต่งภาพเคลื่อนไหวได้ที่
แสดงหน้าจอแนะนำบนหน้าจอให้นานขึ้น
และ
ปรับแต่งภาพเคลื่อนไหวสำหรับการปิดหน้าจอแนะนำ
ปรับกิจกรรมหน้าจอแนะนำที่กำหนดเองให้เข้ากับหน้าจอแนะนำ
หลังจากย้ายข้อมูลไปยังหน้าจอ Splash สำหรับ Android 12 ขึ้นไปแล้ว ให้ตัดสินใจว่าจะทำอย่างไรกับหน้าจอ Splash ที่กำหนดเองก่อนหน้าActivity
คุณมีตัวเลือกต่อไปนี้
- เก็บกิจกรรมที่กำหนดเองไว้ แต่ป้องกันไม่ให้แสดง
- เก็บกิจกรรมที่กำหนดเองไว้เพื่อเหตุผลด้านการสร้างแบรนด์
- นำกิจกรรมที่กำหนดเองออกและปรับแอปตามความจำเป็น
ป้องกันไม่ให้ระบบแสดงกิจกรรมที่กำหนดเอง
หากหน้าจอเริ่มต้นก่อนหน้าActivity
ใช้สำหรับการกำหนดเส้นทางเป็นหลัก ให้พิจารณาวิธีนำออก เช่น คุณอาจลิงก์ไปยังกิจกรรมจริงโดยตรง
หรือย้ายไปยังกิจกรรมเดียวที่มีคอมโพเนนต์ย่อย หากทำไม่ได้ คุณสามารถใช้
SplashScreen.setKeepOnScreenCondition
เพื่อคงกิจกรรมการกำหนดเส้นทางไว้ แต่หยุดไม่ให้แสดงผล การทำเช่นนี้จะ
โอนหน้าจอเริ่มต้นไปยังกิจกรรมถัดไปและช่วยให้การเปลี่ยนผ่านเป็นไปอย่างราบรื่น
Kotlin
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() } ...
Java
public class RoutingActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { SplashScreen splashScreen = SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); // Keep the splash screen visible for this Activity. splashScreen.setKeepOnScreenCondition(() -> true ); startSomeNextActivity(); finish(); } ...
เก็บกิจกรรมที่กำหนดเองไว้เพื่อการสร้างแบรนด์
หากต้องการใช้หน้าจอแนะนำเวอร์ชันก่อนหน้า Activity
เพื่อเหตุผลด้านการสร้างแบรนด์ คุณสามารถเปลี่ยนจากหน้าจอแนะนำของระบบเป็นหน้าจอแนะนำที่กำหนดเอง Activity
ได้โดยปรับแต่งภาพเคลื่อนไหวสำหรับการปิดหน้าจอแนะนำ
อย่างไรก็ตาม เราขอแนะนำให้หลีกเลี่ยงสถานการณ์นี้หากเป็นไปได้ และใช้ SplashScreen
API เพื่อสร้างแบรนด์หน้าจอแนะนํา
หากต้องการแสดงกล่องโต้ตอบ เราขอแนะนำให้แสดงกล่องโต้ตอบดังกล่าวเหนือกิจกรรมหน้าจอแนะนำที่กำหนดเองในภายหลัง หรือเหนือกิจกรรมหลักหลังจากหน้าจอแนะนำของระบบ
นำกิจกรรมหน้าจอแนะนำที่กำหนดเองออก
โดยทั่วไป เราขอแนะนำให้นำหน้าจอเริ่มต้นที่กำหนดเองก่อนหน้าออกActivity
ทั้งหมดเพื่อหลีกเลี่ยงการทำซ้ำของหน้าจอเริ่มต้น เพิ่มประสิทธิภาพ
และลดเวลาในการโหลดหน้าจอเริ่มต้น มีเทคนิคต่างๆ ที่คุณใช้เพื่อหลีกเลี่ยงการแสดงกิจกรรมหน้าจอ Splash ที่ซ้ำกันได้
ใช้การโหลดแบบ Lazy สำหรับคอมโพเนนต์ โมดูล หรือไลบรารี หลีกเลี่ยงการโหลด หรือการเริ่มต้นคอมโพเนนต์หรือไลบรารีที่ไม่จำเป็นต่อการทำงานของแอป เมื่อเปิดตัว โหลดภายหลังเมื่อแอปต้องการ
หากแอปจำเป็นต้องใช้คอมโพเนนต์เพื่อให้ทำงานได้อย่างถูกต้อง ให้โหลดคอมโพเนนต์เฉพาะเมื่อจำเป็นจริงๆ และไม่ใช่ตอนเปิดแอป หรือใช้เธรดเบื้องหลังเพื่อโหลดคอมโพเนนต์หลังจากที่แอปเริ่มทำงาน พยายามทำให้
Application.onCreate()
มีน้ำหนักเบาที่สุดนอกจากนี้ คุณยังได้รับประโยชน์จากการใช้ App Startup Library เพื่อเริ่มต้นคอมโพเนนต์ เมื่อแอปพลิเคชันเริ่มต้นได้ด้วย เมื่อทำเช่นนั้น โปรดตรวจสอบว่ายังคงโหลดโมดูลที่จำเป็นทั้งหมดสำหรับกิจกรรมเริ่มต้น และอย่าทำให้เกิดความหน่วงเมื่อโมดูลที่โหลดแบบ Lazy Loading พร้อมใช้งาน
สร้างตัวยึดตำแหน่งขณะโหลดข้อมูลจำนวนเล็กน้อยในเครื่อง ใช้ แนวทางการกำหนดธีมที่แนะนำและระงับการแสดงผลไว้จนกว่าแอปจะ พร้อม หากต้องการใช้หน้าจอเริ่มต้นที่เข้ากันได้แบบย้อนหลัง ให้ทำตาม ขั้นตอนที่ระบุไว้ใน แสดงหน้าจอเริ่มต้นบนหน้าจอให้นานขึ้น
แสดงตัวยึดตำแหน่ง สำหรับการโหลดที่อิงตามเครือข่ายซึ่งมีระยะเวลาที่ไม่แน่นอน ให้ปิดหน้าจอเริ่มต้นและแสดงตัวยึดตำแหน่งสำหรับการโหลดแบบไม่พร้อมกัน ลองใช้ภาพเคลื่อนไหวเล็กๆ กับพื้นที่เนื้อหาที่แสดงถึง สถานะการโหลด ตรวจสอบว่าโครงสร้างเนื้อหาที่โหลดตรงกับโครงสร้างโครงร่าง ให้มากที่สุดเพื่อรองรับการเปลี่ยนผ่านที่ราบรื่นเมื่อโหลดเนื้อหา
ใช้การแคช เมื่อผู้ใช้เปิดแอปเป็นครั้งแรก คุณจะแสดงตัวบ่งชี้การโหลดสำหรับองค์ประกอบ UI บางอย่างได้ ดังที่แสดงในรูปต่อไปนี้ ครั้งถัดไปที่ผู้ใช้กลับมาที่แอป คุณจะแสดงเนื้อหาที่แคชนี้ได้ในขณะที่ โหลดเนื้อหาล่าสุด