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

หากคุณใช้หน้าจอแนะนำที่กําหนดเองใน Android 11 หรือเวอร์ชันก่อนหน้า ให้ย้ายข้อมูลแอปไปยัง SplashScreen API เพื่อช่วยตรวจสอบว่าแอปแสดงผลอย่างถูกต้องใน Android 12 ขึ้นไป

ตั้งแต่ Android 12 เป็นต้นไป ระบบจะใช้หน้าจอแนะนําเริ่มต้นของระบบ Android เมื่ออยู่ในโหมด Cold และ Warm Start ในแอปทั้งหมด โดยค่าเริ่มต้น ระบบจะสร้างหน้าจอแนะนำนี้โดยใช้องค์ประกอบไอคอน Launcher ของแอปและ windowBackground ของธีม หากเป็นธีมสีเดียว

หากไม่ย้ายข้อมูลแอป ประสบการณ์การเปิดตัวแอปใน Android 12 ขึ้นไปอาจมีประสิทธิภาพลดลงหรือได้ผลลัพธ์ที่ไม่คาดคิด

  • หากมีการใช้หน้าจอแนะนำที่มีอยู่โดยใช้ธีมที่กำหนดเองซึ่งลบล้าง android:windowBackground ระบบจะแทนที่หน้าจอแนะนำที่กำหนดเองด้วยหน้าจอแนะนำเริ่มต้นของระบบ Android ใน Android 12 ขึ้นไป ซึ่งอาจไม่ใช่ประสบการณ์การใช้งานที่แอปของคุณตั้งใจไว้

  • หากมีการใช้หน้าจอแนะนำที่มีอยู่โดยใช้ Activity โดยเฉพาะ การเปิดตัวแอปในอุปกรณ์ที่ใช้ Android 12 ขึ้นไปจะส่งผลให้มีหน้าจอแนะนำที่ซ้ำกัน โดยหน้าจอแนะนำของระบบจะแสดงขึ้นตามด้วยกิจกรรมหน้าจอแนะนำที่มีอยู่

คุณสามารถป้องกันประสบการณ์การใช้งานที่ลดลงหรือไม่ตั้งใจเหล่านี้ได้โดยทําตามกระบวนการย้ายข้อมูลตามที่อธิบายไว้ในเอกสารนี้ หลังจากย้ายข้อมูลแล้ว API จะปรับปรุงเวลาเริ่มต้น ช่วยให้คุณควบคุมประสบการณ์การใช้งานหน้าจอแนะนำได้อย่างเต็มที่ และสร้างประสบการณ์การเปิดตัวที่สอดคล้องกับแอปอื่นๆ ในแพลตฟอร์มมากขึ้น

ไลบรารีความเข้ากันได้ของ SplashScreen

คุณใช้ SplashScreen API ได้โดยตรง แต่ขอแนะนำอย่างยิ่งให้ใช้ไลบรารีความเข้ากันได้ของ SplashScreen สำหรับ Androidx แทน ไลบรารี compat ใช้ SplashScreen API, เปิดใช้การทำงานร่วมกันแบบย้อนหลัง และสร้างรูปลักษณ์ที่สอดคล้องกับการแสดงหน้าจอแนะนำใน Android ทุกเวอร์ชัน เอกสารนี้เขียนขึ้นโดยใช้ไลบรารี compat

หากคุณย้ายข้อมูลโดยใช้ SplashScreen API โดยตรงใน Android 11 และเวอร์ชันก่อนหน้า หน้าจอแนะนำจะมีลักษณะเหมือนกับก่อนการย้ายข้อมูล ตั้งแต่ Android 12 เป็นต้นไป หน้าจอแนะนำจะมีรูปลักษณ์และการใช้งานของ Android 12

หากคุณย้ายข้อมูลโดยใช้ไลบรารี SplashScreen compat ระบบจะแสดงหน้าจอแนะนำเดียวกันใน Android ทุกเวอร์ชัน

ย้ายข้อมูลการใช้งานหน้าจอแนะนำ

ทำตามขั้นตอนต่อไปนี้เพื่อย้ายข้อมูลการใช้งานหน้าจอแนะนำที่มีอยู่ไปยัง 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 เป็นโฆษณาที่ถอนออกได้หรือวาดภาพเคลื่อนไหวได้ ส่วนแอตทริบิวต์อื่นๆ จะเป็นแอตทริบิวต์ที่ไม่บังคับ

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

ปรับกิจกรรมหน้าจอแนะนำที่กำหนดเองให้เข้ากับหน้าจอแนะนำ

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

  • ใช้การโหลดแบบเลื่อนเวลาสำหรับคอมโพเนนต์ โมดูล หรือไลบรารี หลีกเลี่ยงการโหลดหรือเริ่มต้นคอมโพเนนต์หรือไลบรารีที่ไม่จําเป็นสําหรับให้แอปทํางานเมื่อเปิด โหลดภายหลังเมื่อแอปต้องใช้

    หากแอปต้องใช้คอมโพเนนต์เพื่อให้ทำงานได้อย่างถูกต้องจริงๆ ให้โหลดเฉพาะเมื่อจําเป็นจริงๆ เท่านั้น ไม่ใช่ตอนเปิดแอป หรือใช้เธรดเบื้องหลังเพื่อโหลดหลังจากแอปเริ่มทำงาน พยายามทำให้ Application.onCreate() เบาที่สุดเท่าที่จะทำได้

    นอกจากนี้ คุณยังได้รับประโยชน์จากการใช้คลังการเริ่มต้นของแอปเพื่อเริ่มต้นใช้งานคอมโพเนนต์เมื่อแอปพลิเคชันเริ่มต้น เมื่อดำเนินการดังกล่าว โปรดตรวจสอบว่ายังคงโหลดข้อบังคับทั้งหมดสำหรับกิจกรรมเริ่มต้น และอย่าทำให้เกิดความกระตุกเมื่อข้อบังคับที่โหลดแบบขี้เกียจพร้อมใช้งาน

  • สร้างตัวยึดตําแหน่งขณะโหลดข้อมูลจํานวนเล็กน้อยในเครื่อง ใช้วิธีการจัดธีมที่แนะนำ ค้างไว้จนกว่าแอปจะพร้อมใช้งาน หากต้องการใช้หน้าจอแนะนำที่เข้ากันได้แบบย้อนหลัง ให้ทำตามขั้นตอนที่ระบุไว้ในแสดงหน้าจอแนะนำบนหน้าจอเป็นเวลานานขึ้น

  • แสดงตัวยึดตำแหน่ง สําหรับการโหลดที่อิงตามเครือข่ายซึ่งมีระยะเวลาที่ไม่แน่นอน ให้ปิดหน้าจอแนะนำและแสดงตัวยึดตําแหน่งสําหรับการโหลดแบบไม่พร้อมกัน ลองใช้ภาพเคลื่อนไหวเล็กๆ น้อยๆ ในพื้นที่เนื้อหาที่แสดงสถานะการโหลด ตรวจสอบว่าโครงสร้างเนื้อหาที่โหลดตรงกับโครงสร้างโครงร่างมากที่สุด เพื่อให้การเปลี่ยนเป็นไปอย่างราบรื่นเมื่อโหลดเนื้อหา

  • ใช้การแคช เมื่อผู้ใช้เปิดแอปเป็นครั้งแรก คุณสามารถแสดงตัวบ่งชี้การโหลดสำหรับองค์ประกอบ UI บางรายการได้ ดังที่แสดงในรูปภาพต่อไปนี้ ครั้งต่อไปที่ผู้ใช้กลับมาที่แอป คุณจะแสดงเนื้อหาที่แคชไว้นี้ได้ขณะที่ โหลดเนื้อหาล่าสุด

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