Di chuyển cách triển khai màn hình chờ hiện có sang Android 12 trở lên

Nếu đã triển khai màn hình chờ tuỳ chỉnh trong Android 11 trở xuống, thì bạn cần chuyển ứng dụng của mình sang API SplashScreen để đảm bảo màn hình chờ này xuất hiện chính xác trên Android 12 trở lên.

Kể từ Android 12, hệ thống luôn áp dụng màn hình chờ mới theo mặc định của hệ thống Android khi khởi động lạnhkhởi động ấm cho tất cả ứng dụng. Theo mặc định, màn hình chờ mặc định của hệ thống được tạo bằng phần tử biểu tượng trình chạy của ứng dụng và windowBackground của giao diện (nếu là màu đơn).

Nếu bạn không di chuyển ứng dụng, trải nghiệm khởi chạy ứng dụng trên Android 12 trở lên sẽ bị giảm chất lượng hoặc có thể dẫn đến kết quả không mong muốn:

  • Nếu màn hình chờ hiện tại của bạn được triển khai bằng một giao diện tuỳ chỉnh ghi đèandroid:windowBackground, thì hệ thống sẽ thay thế màn hình chờ tuỳ chỉnh đó bằng màn hình chờ mặc định của hệ thống từ Android 12 trở lên (có thể không phải là trải nghiệm mà bạn mong muốn cho ứng dụng của mình).

  • Nếu bạn đã triển khai màn hình chờ hiện có bằng Activity chuyên biệt, thì việc khởi chạy ứng dụng của bạn trên các thiết bị chạy Android 12 trở lên sẽ gây ra hiện tượng trùng lặp màn hình: màn hình chờ mới của hệ thống sẽ xuất hiện, sau đó đến hoạt động màn hình chờ hiện tại của bạn.

Bạn có thể ngăn chặn các trải nghiệm kém chất lượng hoặc không mong muốn này bằng cách hoàn tất quy trình di chuyển được mô tả trong hướng dẫn này. Sau khi bạn di chuyển, API mới sẽ cải thiện thời gian khởi động, cho bạn toàn quyền kiểm soát trải nghiệm màn hình chờ và đảm bảo trải nghiệm khởi chạy nhất quán hơn trong các ứng dụng khác trên nền tảng này.

Thư viện khả năng tương thích SplashScreen

Bạn có thể sử dụng trực tiếp API SplashScreen. Tuy nhiên, bạn nên sử dụng thư viện khả năng tương thích SplashScreen Androidx. Thư viện khả năng tương thích sử dụng API SplashScreen, đem lại khả năng tương thích ngược và tạo giao diện nhất quán cho giao diện màn hình chờ trên tất cả phiên bản Android. Tài liệu hướng dẫn này được viết bằng thư viện tương thích.

Nếu bạn chọn di chuyển trực tiếp bằng API SplashScreen thì trên Android 11 trở xuống, màn hình chờ của bạn sẽ trông giống hệt như trước đây. Từ Android 12 trở lên, màn hình chờ sẽ có giao diện Android 12 mới.

Di chuyển cách triển khai màn hình chờ

Hoàn tất các bước sau để di chuyển cách triển khai màn hình chờ hiện tại của bạn sang trải nghiệm Android 12 trở lên.

Quy trình này áp dụng cho mọi hình thức triển khai mà bạn đang di chuyển. Nếu đang di chuyển từ Activity chuyên biệt, bạn cũng nên làm theo các phương pháp hay nhất được mô tả trong tài liệu này để điều chỉnh Activity cho màn hình chờ tuỳ chỉnh của mình. API SplashScreen mới cũng làm giảm độ trễ khi khởi động nhờ hoạt động màn hình chờ chuyên biệt.

Sau khi bạn di chuyển bằng cách sử dụng thư viện khả năng tương thích SplashScreen, hệ thống sẽ cho hiện cùng một màn hình chờ trên mọi phiên bản Android.

Cách di chuyển màn hình chờ:

  1. Trong tệp build.gradle, hãy thay đổi compileSdkVersion và đưa thư viện khả năng tương thích SplashScreen vào các phần phụ thuộc.

    build.gradle
    
    android {
       compileSdkVersion 31
       ...
    }
    dependencies {
       ...
       implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
    }
    
  2. Tạo một giao diện có phần tử cha là Theme.SplashScreen, đồng thời thiết lập giá trị của postSplashScreenTheme thành giao diện mà Activity sẽ sử dụng và windowSplashScreenAnimatedIcon thành một thành phần có thể vẽ hoặc thành phần đồ hoạ động có thể vẽ. Các thuộc tính khác là không bắt buộc.

    <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 either 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. -->
       <!-- Required -->
       <item name="postSplashScreenTheme">@style/Theme.App</item>
    </style>
    

    Nếu muốn thêm màu nền bên dưới biểu tượng, bạn có thể sử dụng giao diện Theme.SplashScreen.IconBackground và thiết lập thuộc tính windowSplashScreenIconBackground.

  3. Trong tệp kê khai, hãy thay thế giao diện của hoạt động khởi động bằng giao diện mà bạn đã tạo ở bước trước.

    <manifest>
       <application android:theme="@style/Theme.App.Starting">
        <!-- or -->
            <activity android:theme="@style/Theme.App.Starting">
    ...
    
  4. Hãy gọi installSplashScreen trong hoạt động khởi động trước khi gọi 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 trả về đối tượng màn hình chờ mà bạn có thể tuỳ ý sử dụng để tuỳ chỉnh ảnh động hoặc làm cho màn hình chờ xuất hiện trên màn hình lâu hơn. Để biết thêm thông tin về cách tuỳ chỉnh ảnh động, hãy xem phần Giữ màn hình chờ trên màn hình lâu hơnTùy chỉnh ảnh động để đóng màn hình chờ.

Điều chỉnh Hoạt động màn hình chờ tuỳ chỉnh cho phù hợp với trải nghiệm màn hình chờ mới

Sau khi bạn di chuyển sang trải nghiệm màn hình chờ mới dành cho Android 12 trở lên, Activity màn hình chờ tuỳ chỉnh của bạn vẫn còn lại. Vì vậy, bạn cần quyết định cách xử lý. Bạn có các lựa chọn sau:

  • Giữ lại hoạt động tuỳ chỉnh nhưng không cho hoạt động này xuất hiện
  • Giữ lại hoạt động tuỳ chỉnh cho mục đích xây dựng thương hiệu
  • Xoá hoạt động tuỳ chỉnh và điều chỉnh ứng dụng của bạn cho phù hợp nếu cần

Ngăn Hoạt động tuỳ chỉnh xuất hiện

Nếu Activity màn hình chờ hiện có của bạn chủ yếu dùng để chuyển hướng cho người dùng, hãy cân nhắc các cách xoá màn hình chờ này đi; ví dụ: bạn có thể liên kết trực tiếp đến hoạt động thực tế hoặc chuyển sang một hoạt động đơn bằng các thành phần phụ. Nếu việc này không khả thi, bạn có thể sử dụng SplashScreen#setKeepOnScreenCondition để giữ lại hoạt động chuyển hướng nhưng không cho hoạt động này xuất hiện. Cách làm này sẽ chuyển màn hình chờ sang hoạt động tiếp theo và giúp quá trình chuyển đổi diễn ra suôn sẻ.

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();
    }
  ...
  

Giữ lại hoạt động tuỳ chỉnh cho mục đích xây dựng thương hiệu

Nếu bạn muốn sử dụng một Activity cho màn hình chờ theo sau để xây dựng thương hiệu, bạn có thể chuyển từ màn hình chờ của hệ thống sang Activity màn hình chờ tuỳ chỉnh bằng cách tuỳ chỉnh ảnh động để đóng màn hình chờ. Tuy nhiên, bạn nên tránh trường hợp này nếu có thể và sử dụng API SplashScreen mới để xây dựng thương hiệu cho màn hình chờ của mình.

Xoá Hoạt động màn hình chờ tuỳ chỉnh

Nhìn chung, bạn nên xoá hoàn toàn Activity màn hình chờ tuỳ chỉnh để tránh việc màn hình chờ bị trùng lặp, qua đó tăng hiệu suất và giảm thời gian tải màn hình chờ. Có nhiều kỹ thuật mà bạn có thể sử dụng để tránh xuất hiện nhiều hoạt động màn hình chờ.

  • Tải từng thành phần, mô-đun hoặc thư viện của bạn: Tránh tải hoặc khởi chạy các thành phần hoặc thư viện không cần thiết để ứng dụng hoạt động khi khởi động mà chỉ tải khi ứng dụng cần.

    Nếu ứng dụng của bạn thực sự cần một thành phần để hoạt động bình thường, hãy chỉ tải thành phần đó khi thực sự cần thiết thay vì tải vào thời điểm khởi động hoặc sử dụng luồng trong nền để tải sau khi ứng dụng khởi động. Hãy cố gắng đảm bảo Application onCreate() thật gọn nhẹ.

    Bạn cũng có thể hưởng lợi từ việc sử dụng thư viện Khởi động ứng dụng để khởi chạy các thành phần khi khởi động ứng dụng. Khi áp dụng cách này, hãy đảm bảo ứng dụng vẫn tải tất cả mô-đun bắt buộc cho hoạt động khởi động và không gây giật khi mô-đun được tải từng phần.

  • Tạo trình giữ chỗ trong khi tải một lượng nhỏ dữ liệu trên thiết bị: Sử dụng phương pháp áp dụng giao diện mà chúng tôi đề xuất và trì hoãn quá trình kết xuất cho đến khi ứng dụng sẵn sàng. Để triển khai màn hình chờ có khả năng tương thích ngược, hãy làm theo các bước trong phần Giữ màn hình chờ trên màn hình lâu hơn.

  • Hiển thị phần giữ chỗ: Đối với các lượt tải dựa trên kết nối mạng có thời lượng không xác định, hãy đóng màn hình chờ và hiển thị phần giữ chỗ cho quá trình tải không đồng bộ. Hãy cân nhắc áp dụng ảnh động tinh tế cho vùng nội dung phản ánh trạng thái tải. Bạn cũng cần đảm bảo rằng cấu trúc nội dung đã tải khớp với cấu trúc cơ bản nhất có thể để chuyển đổi suôn sẻ sau khi tải xong nội dung.

  • Sử dụng bộ nhớ đệm: Khi người dùng mở ứng dụng của bạn lần đầu tiên, bạn có thể cho hiện chỉ báo tải cho một số phần tử giao diện người dùng (như minh hoạ trong ví dụ sau). Vào lần tiếp theo người dùng quay lại ứng dụng, bạn có thể cho hiện nội dung đã lưu vào bộ nhớ đệm trong lúc tải nội dung gần đây hơn.

    Hình 1: Hiển thị phần giữ chỗ trong giao diện người dùng