- vừa được xem lúc

Splash screens cho Android 12 trở lên

0 0 20

Người đăng: Dong Thi Hien

Theo Viblo Asia

Bắt đầu với Android 12, SplashScreen API cho phép các ứng dụng khởi chạy với animation, into-app motion lúc khởi chạy, một màn hình splash hiển thị app icon và transition điều hướng tới app của bạn. Một SplashScreen là một Window cho nên nó bao gồm Activity. Link doccument.

Chú ý: Nếu ứng dụng triển khai một màn hình custom splash trên Android 11 hoặc thấp hơn thì hãy chuyển đổi sang SplashScreen API hoặc Androidx SplashScreen compat library (recommend) để chắc chắn nó chạy đúng trên Android >=12.

Nếu ứng dụng không migrate sang SplashScreen thì sao? - Thì sẽ gây giảm chất lượng hoặc có những kết quả không mong muốn:

  • Nếu màn splash hiện tại của bạn đang được implement sử dụng một custom theme, nó overides android:windowBackground, hệ thống sẽ thay thế custom splash của bạn với default Android system splash screen cho Android 12 và cao hơn.
  • Nếu màn splash hiện tại của bạn được implement với dedicated Activity, bạn chạy ứng dụng trên Android 12 hoặc cao hơn, thì kết quả là bạn sẽ thấy 2 màn splash: màn splash mới của hệ thống, sau đó là màn splash với activity của bạn.

1. Tổng quan về cách thức hoạt động

1.1.Cách thức hoạt động

Khi một user khơi chạy một ứng dụng trong khi processs của ứng dụng không hoạt động (cold start) hoặc Activity không được khởi tạo (warm start), thì những sự kiện sau sẽ xảy ra:

1.Hệ thống show màn hình splash sử dụng themes và một số animations mà bạn định nghĩa.

2.Khi mà ứng dụng đã sẵn sàng, màn splash được bỏ qua và hiển thị app.

Màn hình splash không bao giờ được show trong một hot start.

Thêm một chút về cold start, warm start, hot start:

+Cold start: app bắt đầu chạy từ đầu: system's process chưa tạo ra app's process. Thường xảy ra ở case ứng dụng chạy lần đầu sau khi boot device hoặc khi hệ thống kill ứng dụng.

+Warn start: app được khởi chạy lại lần nữa. Ví dụ như là: Người dùng thoát ứng dụng của bạn sau đó khởi chạy lại. Process có thể tiếp tục chạy nhưng app phải tạo lại activity từ đầu thông qua hàm onCreate(). Hệ thống xoá ứng dụng khỏi bộ nhớ, và sau đó người dùng khởi chạy lại. Process và activity cần restart, nhưng có thể lấy data dựa vào saved instance state bundle truyền trong hàm onCreate().

+Hot start: hệ thống đưa activity lên foreground. Nếu các activity của ứng dụng vẫn nằm trong bộ nhớ thì app tránh được việc phải render lại layout và tạo lại object. Nếu bộ nhớ bị xoá bởi một vài lý do chẳng hạn hàm onTrimMemory() thì các object sẽ cần tạo lại để đáp ứng Hot start. Hệ thống sẽ hiển thị màn hình rỗng cho đến khi app hoàn thành việc render activity.

Biểu đồ minh hoạ:

1.2. Hiệu ứng, trình tự khởi chạy và một số yêu cầu

Hiệu ứng và trình tự khởi chạy của một số thành phần trong màn splash được minh hoạ như sau:

Từ Android 12 trở lên, màn splash sẽ gồm icon app ở chính giữa màn hình, animation và màu nền nếu có. Dev không cần custom một màn hình splash thủ công nữa.

Yêu cầu về animation trong màn Splash:

  • Đặt một màu nên duy nhất không có độ trong suốt (transparency). Day and Night mode được hỗ trợ với SplashScreen compat library.

  • Animated icon: Format thì phải là một AnimatedVectorDrawable (AVD) XML. Duration: khuyên khích nên sử dụng animation cho màn splash khoảng dưới 1000 ms, nếu vượt quá thời gian này thì nên xem xét lại.

  • Cần điều chỉnh để ứng dụng chỉ show màn splash trong một khoảng thời gian. Có thể kéo dài thời gian cho màn splash bằng cách sau: link

2. Migrate your existing splash screen implementation to Android 12 and higher.

Đầu tiên, bạn hãy check version kotlin của bạn có phải là mới nhất chưa? -Hoặc chỉ cần nó >=1.6.0.

  1. Để sử dụng SplashScreen core library, thêm vào project của bạn thư viện sau trong file build.gradle và thay đổi compileSdkVersion:
android { compileSdkVersion 31 ...
}
dependencies { ... implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
}

2.Tạo một theme với parent là Theme.SplashScreen, và set giá trị cho postSplashScreenTheme và windowSplashScreenAnimatedIcon, những thuộc tính khác là optional:

<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 bạn muốn thêm màu nền cho icon, bạn có thể sử dụng Theme.SplashScreen.IconBackground và set thuộc tính windowSplashScreenIconBackground.

  1. Trong file Manifest, thay theme cho starting activity hoặc application bằng theme mà bạn vừa tạo:
<manifest> <application android:theme="@style/Theme.App.Starting"> <!-- or --> <activity android:theme="@style/Theme.App.Starting">
...
  1. Gọi installSplashScreen trước super.onCreate():
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { // Handle the splash screen transition. val splashScreen = installSplashScreen() super.onCreate(savedInstanceState) setContentView(R.layout.main_activity)
...

installSplashScreen trả về một đối tượng splash screen, bạn có thể sử dụng nó để custome lại animation hoặc giữ cho màn splash lâu hơn. Tham khảo: Keep the splash screen on-screen for longer periods and Customize the animation for dismissing the splash screen.

Trên đây là toàn bộ nội dung về SplashScreen mà mình muốn chia sẻ. Cảm ơn các bạn đã đọc bài viết này, chúc các bạn code vui vẻ nha!

Tài liệu tham khảo:

Android document: https://developer.android.com/develop/ui/views/launch/splash-screen

Bình luận

Bài viết tương tự

- vừa được xem lúc

Create Certificates, Identifiers & Profiles App IOS

Mở đầu. Xin chào các bạn hôm này mình sẽ giới thiệu cho các bạn một cách tạo certificates, identifiers & profiles với tài khoản Apple Developer. Có tài khoản Apple Developer. Ai chưa có thì không cần đọc tiếp nha :.

0 0 44

- vừa được xem lúc

Chương 5 Object oriented programming

Chương 5 Object oriented programming. Tôi lần đầu tiên được giới thiệu về lập trình hướng đối tượng ở trường cao đẳng nơi tôi đã có một giới thiệu tóm tắc về c++.

0 0 34

- vừa được xem lúc

Hướng dẫn tạo link tracking nguồn cài đặt cho mobile app (xác định nguồn cài đặt cho mobile app)

Giới thiệu. Bạn đang chạy quá nhiều campaign cho ứng dụng mobile từ các mạng xã hội: facebook, twitter, ... các chiến dịch offline cũng như các chiến dịch online của bên thứ 3. Bạn không thể xác định được nguồn nào mang cho mình lượng install cao nhất. Vì nếu dùng shortlink thì chỉ đo được lượt clic

0 0 41

- vừa được xem lúc

SwiftUi: Bắt đầu từ những điều căn bản nhất. Phần 1

Trong bài này, bạn sẽ được tìm hiểu về việc tạo ra giao diện bằng việc khai báo và tuỳ chỉnh views, cách sử dụng các biến trạng thái để cập nhật giao diện thay vì dùng code. Tập sử dụng tính năng new preview và live preview, những trải nghiệm thú vị khi làm việc cùng với code và WYSIWYG layout.

0 0 69

- vừa được xem lúc

Những điều khác nhau cần biết giữa thiết kế ứng dụng Android và ứng dung iOS

Để tạo ra ứng dụng có trải nghiệm tốt nhất, tương thích với dòng thiết bị, bạn nên ghi nhớ sự khác biệt giữa 2 nền tảng iOS và Android. Các ứng dụng này không chỉ khác nhau ở phần trông như thế nào, chúng cũng khác nhau về cấu trúc và luồng ứng dụng.

0 0 36

- vừa được xem lúc

Những khó khăn khi làm dự án maintain ( dưới góc nhìn của một React Native Developer)

Đi làm một vài năm ở công ty outsource, minh thấy hầu như các anh em đều khá e ngại với các dự án maintain, nhất là thuộc hàng code "siêu thối", spec thuộc loại "siêu to khổng lồ ",... Và mình cũng thế, mình cũng đang "theo đuổi" một chú em với "chức năng siêu to kh

0 0 317