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 của bạn 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 áp dụng màn hình chờ mặc định của hệ thống Android khi khởi động nguội và khởi động ấm cho 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 đơ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 có thể bị giảm chất lượng hoặc có 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 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 dự kiến.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ờ 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 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 quá trình di chuyển được mô tả trong tài liệu này. Sau khi bạn di chuyển, API cải thiện thời gian khởi động, cho phép bạn toàn quyền kiểm soát trải nghiệm màn hình chờ, đồng thời tạo ra trải nghiệm phát hành nhất quán hơn với các ứng dụng khác trên nền tảng.
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
trên Android 11 trở xuống
màn hình chờ của bạn trông 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 Android 12.
Nếu bạn di chuyển bằ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 tất cả 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 của bạn 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 biệt, 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 của mình. API SplashScreen
cũng làm giảm độ trễ khi khởi động nhờ hoạt động màn hình chờ chuyên biệt.
Để di chuyển màn hình chờ, hãy làm như sau:
Trong tệp
build.gradle
, hãy thay đổicompileSdkVersion
và đưa thư viện tương thíchSplashScreen
vào các phần phụ thuộc.build.gradle android { compileSdkVersion 31 ... } dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02' }
Tạo một giao diện có phần tử mẹ là
Theme.SplashScreen
. Đặt giá trị củapostSplashScreenTheme
thành giao diện màActivity
phải sử dụng và giá trị củawindowSplashScreenAnimatedIcon
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ínhwindowSplashScreenIconBackground
.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"> ...
Hãy gọi
installSplashScreen
trong hoạt động khởi động trước khi gọisuper.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ơn và Tuỳ 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
để thực hiện 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 không cho hoạt động này xuất hiện.
- 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 cho phù hợp nếu cần.
Không cho hiển thị Hoạt động tuỳ chỉnh
Nếu màn hình chờ trước đó Activity
chủ yếu được dùng để định tuyến,
hãy cân nhắc cách loại bỏ nội dung đó. Ví dụ: bạn có thể liên kết trực tiếp đến
hoặc chuyển sang một hoạt động đơn lẻ bằng các thành phần phụ. Nếu đây không phải là
khả thi, bạn có thể sử dụng
SplashScreen.setKeepOnScreenCondition
để giữ hoạt động định tuyến tại chỗ nhưng không cho hoạt động kết xuất. Cách làm 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 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 vì mục đích xây dựng thương hiệu
Nếu muốn sử dụng màn hình chờ Activity
trước đó cho mục đích 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 màn hình chờ tuỳ chỉnh
Activity
bằng cách tuỳ chỉnh ảnh động để đóng màn hình chờ
màn hình.
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
để xây dựng thương hiệu cho màn hình chờ của mình.
Nếu cần hiển thị hộp thoại, chúng tôi bạn nên hiển thị màn hình chờ 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 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
bạn có thể 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 động. 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 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 phần giữ chỗ trong khi tải một lượng nhỏ dữ liệu cục 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 được nêu trong 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, loại bỏ 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 rằng cấu trúc nội dung đã tải khớp với cấu trúc bộ xương cũng như hỗ trợ chuyển tiếp suôn sẻ khi nội dung được tải.
Sử dụng tính 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ể 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 hình 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.