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

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

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

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

ทำตามขั้นตอนต่อไปนี้เพื่อย้ายข้อมูลหน้าจอแนะนำที่มีอยู่ ลงใน Android 12 ขึ้นไป

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

วิธีย้ายข้อมูลหน้าจอแนะนำ

  1. ในไฟล์ build.gradle เปลี่ยน compileSdkVersion และเพิ่ม ไลบรารีที่สอดคล้องกับ SplashScreen ในทรัพยากร 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 ก่อนหน้านี้ออก เพื่อหลีกเลี่ยงหน้าจอแนะนําซ้ำ เพื่อเพิ่มประสิทธิภาพ และเพื่อลดเวลาที่ใช้ในการโหลดหน้าจอแนะนำ มีเทคนิคที่แตกต่างกัน เพื่อหลีกเลี่ยงการแสดงกิจกรรมในหน้าจอแนะนำ (Splash Screen) ที่ซ้ำซ้อน

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

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

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

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

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

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

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