ย้ายข้อมูลการใช้งานหน้าจอแนะนําไปยัง Android 12 ขึ้นไป

หากคุณใช้หน้าจอแนะนําที่กําหนดเองใน 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 ยังช่วยลดเวลาในการตอบสนองของการเริ่มต้น ซึ่งเกิดขึ้นกับกิจกรรมหน้าจอแนะนำโดยเฉพาะด้วย

หากต้องการย้ายข้อมูลหน้าจอเริ่มต้น ให้ทำดังนี้

  1. ในไฟล์ build.gradle ให้เปลี่ยน compileSdkVersion และรวม ไลบรารี SplashScreen compat ไว้ในทรัพยากร Dependency

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. สร้างธีมที่มีธีมหลักเป็น 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

  3. ในไฟล์ Manifest ให้แทนที่ธีมของกิจกรรมเริ่มต้นด้วยธีมที่คุณ สร้างในขั้นตอนก่อนหน้า

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. เรียกใช้ 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 บางอย่างได้ ดังที่แสดงในรูปต่อไปนี้ ครั้งถัดไปที่ผู้ใช้กลับมาที่แอป คุณจะแสดงเนื้อหาที่แคชนี้ได้ในขณะที่ โหลดเนื้อหาล่าสุด

รูปที่ 1 แสดงตัวยึดตำแหน่ง UI