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

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

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

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

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

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

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

ไลบรารี SplashScreen Compat

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

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

หลังจากย้ายข้อมูลไปยังหน้าจอแนะนําสำหรับ 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();
    }
  ...
  

เก็บกิจกรรมที่กำหนดเองไว้เพื่อการสร้างแบรนด์

หากต้องการใช้หน้าจอเริ่มต้น (Splash Screen) เดิม Activity เพื่อเหตุผลด้านการสร้างแบรนด์ คุณ สามารถเปลี่ยนจากหน้าจอเริ่มต้น (Splash Screen) ของระบบไปยังหน้าจอเริ่มต้น (Splash Screen) ที่กำหนดเอง Activity ได้โดยการปรับแต่งภาพเคลื่อนไหวสำหรับการปิดหน้าจอเริ่มต้น (Splash Screen) อย่างไรก็ตาม ควรหลีกเลี่ยงสถานการณ์นี้หากเป็นไปได้ และใช้ SplashScreen API เพื่อสร้างแบรนด์หน้าจอแนะนํา

หากต้องการแสดงกล่องโต้ตอบ เรา ขอแนะนำให้แสดงกล่องโต้ตอบเหนือกิจกรรมหน้าจอแนะนําที่กำหนดเองถัดไปหรือ เหนือกิจกรรมหลักหลังจากหน้าจอแนะนําของระบบ

นํากิจกรรมหน้าจอแนะนําที่กำหนดเองออก

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

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

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

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

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

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

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

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