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

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

Kể từ Android 12, hệ thống sẽ áp dụng màn hình chờ mặc định của hệ thống Android khi khởi động nguộikhởi động ấm đối với tất cả ứng dụng. Theo mặc định, màn hình chờ của hệ thống này đượ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ột màu duy nhất.

Nếu bạn không di chuyển ứng dụng của mình, trải nghiệm chạy ứng dụng trên Android 12 trở lên có thể bị suy giảm hoặc mang lại các kết quả không mong muốn.

  • Nếu màn hình chờ hiện tại được triển khai bằng 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 Android trên Android 12 trở lên. Đây có thể không phải là trải nghiệm mà ứng dụng của bạn mong muốn.

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

Bạn có thể ngăn chặn những 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 tài liệu này. Sau khi bạn di chuyển, API này 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à tạo ra trải nghiệm khởi chạy nhất quán hơn với 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 này được viết bằng thư viện tương thích.

Nếu bạ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ẽ giống hệt như trước khi di chuyển. Kể từ Android 12, màn hình chờ sẽ có giao diện của Android 12.

Nếu 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ẽ hiển thị cùng một màn hình chờ trên mọi phiên bản Android.

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 sang 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 bạn đang di chuyển từ Activity chuyên dụng, hãy 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. API SplashScreen cũng làm giảm độ trễ khởi động được giới thiệu thông qua một hoạt động màn hình chờ chuyên dụng.

Để di chuyển màn hình chờ, hãy làm như sau:

  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ử mẹ của Theme.SplashScreen. Đặt giá trị postSplashScreenTheme thành giao diện mà Activity phải sử dụng và giá trị của windowSplashScreenAnimatedIcon thành một đối tượng có thể vẽ hoặc đối tượng đồ 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 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>
    

    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ờ. Bạn có thể tuỳ ý sử dụng đối tượng này để tuỳ chỉnh ảnh động hoặc để giữ màn hình chờ hiển thị lâu hơn trên màn hình. Để biết thêm thông tin chi tiết 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ơnTuỳ 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 màn hình chờ

Sau khi bạn di chuyển sang màn hình chờ cho Android 12 trở lên, hãy quyết định việc cần làm với Activity màn hình chờ tuỳ chỉnh trước đó. Bạn có các lựa chọn sau:

  • Giữ lại hoạt động tuỳ chỉnh nhưng ngăn hoạt động này hiển thị.
  • Giữ lại hoạt động tuỳ chỉnh vì lý do 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 nếu cần.

Không cho hiển thị Hoạt động tuỳ chỉnh

Nếu Activity màn hình chờ trước đó của bạn chủ yếu được dùng để định tuyến, hãy cân nhắc các cách xoá màn hình chờ này. 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 lẻ 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ữ nguyên hoạt động định tuyến nhưng không cho hoạt động này hiển thị. Thao tác này sẽ chuyển màn hình chờ sang hoạt động tiếp theo và hỗ trợ quá trình chuyển đổi 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 vì mục đích xây dựng thương hiệu

Nếu muốn sử dụng Activity màn hình chờ trước đó vì lý do xây dựng thương hiệu, bạn có thể chuyển đổi 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, tốt nhất là nên tránh trường hợp này nếu có thể và sử dụng API SplashScreen để xây dựng thương hiệu cho màn hình chờ của bạn.

Nếu cần hiển thị một hộp thoại, bạn nên hiển thị hộp thoại đó trên hoạt động màn hình chờ tuỳ chỉnh tiếp theo hoặc trên hoạt động chính sau màn hình chờ của hệ thống.

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ước đó để tránh tình trạng trùng lặp màn hình chờ, tăng hiệu quả 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 hiện các hoạt động thừa trên màn hình chờ.

  • Sử dụng tính năng tải từng phần cho các 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 chạy. Tải chúng sau, khi ứng dụng cần chúng.

    Nếu ứng dụng của bạn thực sự cần một thành phần để hoạt động đúng cách, hãy chỉ tải thành phần đó khi thực sự cần thiết chứ không phải tại thời điểm khởi chạy, 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 thực hiện việc này, hãy đảm bảo 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 hiện tượng giật khi các mô-đun được tải từng phần có sẵn.

  • Tạo phần giữ chỗ trong khi tải một lượng nhỏ dữ liệu cục bộ. Hãy sử dụng phương pháp tuỳ chỉnh giao diện được đề xuất và giữ lại 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 phần giữ chỗ. Đối với các lượt tải dựa trên 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. Hãy đảm bảo cấu trúc nội dung đã tải phù hợp với cấu trúc khung nhất có thể để hỗ trợ chuyển đổi suôn sẻ khi nội dung được tải.

  • Sử dụng chức năng lưu vào 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ể hiện chỉ báo tải cho một số thành phần trên giao diện người dùng, như minh hoạ trong hình sau. Vào lần tiếp theo người dùng quay lại ứng dụng của bạn, bạn có thể hiển thị nội dung đã lưu vào bộ nhớ đệm này trong khi tải nội dung mới hơn.

Hình 1. Đang hiển thị phần giữ chỗ giao diện người dùng.