
Android 13 (API cấp 33) ra mắt tính năng xem trước thao tác quay lại cho các thiết bị Android, chẳng hạn như điện thoại, thiết bị màn hình lớn và thiết bị có thể gập lại. Đây là một phần của bản phát hành trong nhiều năm. Khi tính năng này được triển khai đầy đủ, người dùng có thể xem trước đích đến hoặc kết quả khác của một cử chỉ quay lại trước khi quay lại, từ đó quyết định sẽ tiếp tục hay ở lại khung hiển thị hiện tại.
Ví dụ: việc sử dụng cử chỉ quay lại có thể hiển thị bản xem trước dạng động của Màn hình chính đằng sau ứng dụng của bạn, như trình bày trong bản minh hoạ ở hình 1. Kể từ Android 13, bạn có thể kiểm thử ảnh động quay lại màn hình chính này bằng cách bật tuỳ chọn cho nhà phát triển (như mô tả trên trang này).
Nhằm hỗ trợ tính năng xem trước thao tác quay lại, bạn phải cập nhật ứng dụng bằng API OnBackPressedCallback
AppCompat 1.6.0-alpha05 (AndroidX) trở lên hoặc API nền tảng OnBackInvokedCallback
mới có khả năng tương thích ngược. Hầu hết ứng dụng đều sử dụng API AndroidX có khả năng tương thích ngược.
Bản cập nhật này cung cấp một đường dẫn di chuyển để chặn thao tác quay lại sao cho đúng cách, thông qua việc thay thế tính năng chặn ngược từ KeyEvent.KEYCODE_BACK
và bất kỳ lớp (class) nào bằng các phương thức onBackPressed
như Activity
và Dialog
nhờ Back API (API Quay lại) mới của hệ thống.
Lớp học lập trình và video về Google I/O
Ngoài việc sử dụng tài liệu này trên trang này, hãy thử tham khảo lớp học lập trình của chúng tôi. Lớp học này cung cấp cách triển khai trường hợp sử dụng phổ biến của WebView giúp xử lý tính năng xem trước thao tác quay lại bằng AndroidX Activity API.
Bạn cũng có thể xem video về Google I/O của chúng tôi, trong đó nêu thêm các ví dụ về việc triển khai AndroidX và API nền tảng.
Cập nhật một ứng dụng sử dụng tính năng điều hướng quay lại mặc định
Việc cập nhật ứng dụng để hỗ trợ tính năng này rất đơn giản nếu ứng dụng của bạn không triển khai hành vi quay lại tuỳ chỉnh nào (nói cách khác, ứng dụng sẽ để hệ thống phụ trách quá trình xử lý thao tác quay lại). Bạn chỉ cần chọn sử dụng tính năng này như mô tả trên trang này.
Nếu ứng dụng của bạn dùng Mảnh hoặc Thành phần điều hướng, hãy nâng cấp lên tối thiểu là AndroidX Activity 1.6.0-alpha05.
Cập nhật một ứng dụng dùng tính năng điều hướng quay lại tuỳ chỉnh
Nếu ứng dụng của bạn triển khai hành vi quay lại tuỳ chỉnh, thì sẽ có nhiều đường dẫn di chuyển tuỳ thuộc vào việc ứng dụng đó có sử dụng AndroidX hay không và cách xử lý thao tác điều hướng quay lại.
Ứng dụng của bạn sử dụng AndroidX | Cách ứng dụng của bạn xử lý tính năng điều hướng quay lại | Đường dẫn di chuyển đề xuất (đường liên kết trên trang này) |
Có | API AndroidX | Di chuyển phương thức triển khai quay lại AndroidX hiện có |
API nền tảng không được hỗ trợ | Di chuyển ứng dụng AndroidX chứa API điều hướng quay lại không được hỗ trợ sang API AndroidX | |
Không | API nền tảng không được hỗ trợ, có thể di chuyển | Di chuyển ứng dụng dùng API điều hướng quay lại không được hỗ trợ sang API nền tảng |
Các API nền tảng không được hỗ trợ nhưng không thể di chuyển | Trì hoãn việc chọn tham gia cho đến khi đây là tính năng bắt buộc |
Di chuyển cách triển khai điều hướng quay lại của AndroidX
Đây là trường hợp sử dụng phổ biến nhất (và được đề xuất nhiều nhất). Cách này áp dụng cho các ứng dụng mới hoặc ứng dụng hiện có triển khai cách xử lý thao tác bằng cử chỉ tuỳ chỉnh bằng OnBackPressedDispatcher
, như mô tả trong phần Cung cấp tính năng điều hướng quay lại tuỳ chỉnh.
Nếu ứng dụng của bạn thuộc danh mục này, hãy làm theo các bước sau để thêm tính năng hỗ trợ cho cử chỉ vuốt ngược để dự đoán:
Để đảm bảo rằng các API vốn đang sử dụng
OnBackPressedDispatcher
API (chẳng hạn như Mảnh và Thành phần điều hướng) hoạt động liền mạch với tính năng xem trước thao tác quay lại, hãy nâng cấp lên AndroidX Activity 1.6.0-alpha05.// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
Chọn sử dụng cử chỉ vuốt ngược để dự đoán, như được mô tả trên trang này.
Di chuyển ứng dụng AndroidX chứa API điều hướng quay lại không được hỗ trợ sang API AndroidX
Nếu ứng dụng của bạn dùng thư viện AndroidX nhưng triển khai hoặc tham chiếu đến các API điều hướng quay lại không được hỗ trợ, thì bạn cần chuyển sang sử dụng API AndroidX để hỗ trợ hành vi mới.
Cách di chuyển API không được hỗ trợ sang API AndroidX:
Di chuyển logic xử lý Quay lại của hệ thống sang
OnBackPressedDispatcher
của AndroidX bằng cách triển khaiOnBackPressedCallback
. Để biết hướng dẫn chi tiết, hãy xem bài viết Cung cấp tính năng điều hướng quay lại tuỳ chỉnh.Tắt
OnBackPressedCallback
khi bạn đã sẵn sàng dừng chặn thao tác quay lại.Dừng chặn các sự kiện quay lại qua
OnBackPressed
hoặcKeyEvent.KEYCODE_BACK
.Đảm bảo bạn đã nâng cấp lên AndroidX Activity 1.6.0-alpha05.
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0-alpha05"
Khi bạn đã di chuyển thành công ứng dụng của mình, hãy chọn xem trước thao tác quay lại (như mô tả trong trang này) để xem ảnh động quay lại trang chủ của hệ thống.
Di chuyển ứng dụng dùng API điều hướng quay lại không được hỗ trợ sang API nền tảng
Nếu ứng dụng của bạn không thể dùng các thư viện AndroidX và thay vào đó triển khai hoặc tham chiếu đến thành phần điều hướng Quay lại tuỳ chỉnh bằng các API không được hỗ trợ, thì bạn phải di chuyển sang API nền tảng OnBackInvokedCallback
.
Hãy hoàn thành các bước sau để di chuyển API không được hỗ trợ sang API nền tảng:
Dùng API
OnBackInvokedCallback
mới trên các thiết bị chạy Android 13 trở lên, đồng thời dựa vào những API không được hỗ trợ trên các thiết bị chạy Android 12 trở xuống.Đăng ký logic quay lại tuỳ chỉnh trong
OnBackInvokedCallback
bằngonBackInvokedDispatcher
. Đây là cách để ngăn hoạt động hiện tại hoàn tất và lệnh gọi lại của bạn sẽ có cơ hội phản ứng với thao tác Quay lại sau khi người dùng hoàn tất thao tác Quay lại của hệ thống.Huỷ đăng ký
OnBackInvokedCallback
khi đã sẵn sàng dừng chặn thao tác quay lại. Nếu không, người dùng có thể thấy hành vi không mong muốn khi sử dụng thao tác Quay lại của hệ thống – ví dụ: "bị nghẽn" giữa các khung hiển thị và buộc họ phải thoát ứng dụng của bạn.Sau đây là ví dụ về cách di chuyển logic ra khỏi
onBackPressed
:Kotlin
@Override fun onCreate() { if (BuildCompat.isAtLeastT()) { onBackInvokedDispatcher.registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT ) { /** * onBackPressed logic goes here. For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/window/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } } }
Java
@Override void onCreate() { if (BuildCompat.isAtLeastT()) { getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, () -> { /** * onBackPressed logic goes here - For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } ); } }
Dừng chặn các sự kiện quay lại qua
OnBackPressed
hoặcKeyEvent.KEYCODE_BACK
đối với Android 13 trở lên.Sau khi di chuyển thành công ứng dụng của mình, hãy chọn xem trước thao tác quay lại (theo mô tả trong trang này) để
OnBackInvokedCallback
có hiệu lực.
Chọn xem trước thao tác quay lại
Khi đã xác định được cách cập nhật ứng dụng dựa vào trường hợp của mình, bạn có thể dễ dàng chọn sử dụng nhằm hỗ trợ tính năng xem trước thao tác quay lại.
Để chọn sử dụng, trong AndroidManifest.xml
, trong thẻ <application>
, hãy đặt cờ android:enableOnBackInvokedCallback
thành true
.
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
Nếu bạn không cung cấp một giá trị, thì giá trị mặc định sẽ là false
và thực hiện các hành động sau:
- Tắt ảnh động xem trước thao tác quay lại của hệ thống.
- Bỏ qua
OnBackInvokedCallback
, nhưng các lệnh gọiOnBackPressedCallback
vẫn hoạt động.
Các phương pháp hay nhất về lệnh gọi lại
Dưới đây là các phương pháp hay nhất để dùng lệnh gọi lại hệ thống được hỗ trợ; BackHandler
(dành cho Compose), OnBackPressedCallback
hoặc OnBackInvokedCallback
.
Xác định Trạng thái giao diện người dùng có thể bật và tắt mỗi lệnh gọi lại
Trạng thái giao diện người dùng (UI state) là thuộc tính mô tả giao diện người dùng. Bạn nên làm theo các bước tổng quan sau đây.
Xác định Trạng thái giao diện người dùng có thể bật và tắt mỗi lệnh gọi lại.
Xác định trạng thái đó bằng cách sử dụng loại phần tử giữ dữ liệu có thể ghi nhận được, chẳng hạn như
StateFlow
hoặc Trạng thái Compose, đồng thời bật hoặc tắt lệnh gọi lại khi trạng thái thay đổi.
Nếu ứng dụng của bạn từng liên kết logic quay lại với các câu lệnh có điều kiện, thì việc này có thể cho biết rằng bạn đang phản ứng với sự kiện quay lại sau khi sự kiện đã xảy ra. Đây là dạng thức bạn nên tránh bằng các lệnh gọi lại mới hơn. Nếu có thể, hãy di chuyển lệnh gọi lại ra bên ngoài câu lệnh có điều kiện và thay vào đó, liên kết lệnh gọi lại đó với một loại phần tử giữ dữ liệu có thể ghi nhận được.
Sử dụng lệnh gọi lại hệ thống cho Logic giao diện người dùng
Logic giao diện người dùng (UI logic) cho biết cách hiển thị giao diện người dùng. Sử dụng lệnh gọi lại hệ thống để chạy logic giao diện người dùng, chẳng hạn như hiển thị cửa sổ bật lên hoặc chạy ảnh động.
Nếu ứng dụng của bạn bật lệnh gọi lại hệ thống, thì ảnh động dự đoán sẽ không chạy và bạn phải xử lý sự kiện quay lại. Đừng tạo lệnh gọi lại chỉ để chạy logic không phải giao diện người dùng.
Ví dụ: nếu bạn chỉ chặn các sự kiện quay lại để ghi nhật ký, hãy chuyển sang ghi lại trong vòng đời của Hoạt động hoặc Mảnh.
- Đối với các trường hợp từ hoạt động đến hoạt động hoặc từ mảnh đến hoạt động, hãy ghi nhật ký nếu
isFinishing
trongonDestroy
làtrue
thuộc Vòng đời hoạt động. - Đối với các trường hợp từ mảnh đến mảnh, hãy ghi lại nếu
isRemoving
trongonDestroy
là đúng trong vòng đời khung hiển thị của Mảnh; hoặc ghi nhật ký bằng phương thứconBackStackChangeStarted
hoặconBackStackChangeCommitted
trongFragmentManager.OnBackStackChangedListener
.
Tạo lệnh gọi lại trách nhiệm duy nhất
Bạn làm được điều này vì bạn có thể thêm nhiều lệnh gọi lại vào trình điều phối. Các lệnh gọi lại được thêm vào ngăn xếp, trong đó lệnh gọi lại được bật và thêm gần đây nhất sẽ xử lý cử chỉ quay lại tiếp theo với một lệnh gọi lại cho mỗi thao tác quay lại.
Kiểm thử ảnh động xem trước thao tác quay lại
Kể từ bản phát hành chính thức Android 13, bạn có thể bật tuỳ chọn dành cho nhà phát triển để kiểm thử ảnh động quay lại màn hình chính trong hình 1.
Để kiểm tra ảnh động này, hãy hoàn tất các bước sau:
Trên thiết bị của bạn, hãy chuyển đến phần Cài đặt > Hệ thống > Tuỳ chọn cho nhà phát triển (Settings > System > Developer options).
Chọn Ảnh động vuốt ngược dự đoán.
Chạy ứng dụng đã cập nhật và dùng cử chỉ vuốt ngược để xem ứng dụng hoạt động.