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

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

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

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

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

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

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

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

คุณใช้ 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 หรือ 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();
    }
  ...
  

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

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

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

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

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

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

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

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

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

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

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

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