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

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

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

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

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

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

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

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

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

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

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

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