Tính năng Xem trước thao tác quay lại (một tính năng điều hướng bằng cử chỉ) cho phép người dùng xem trước vị trí mà thao tác vuốt quay lại sẽ đưa họ đến.
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 15, tuỳ chọn dành cho nhà phát triển đối với ảnh động xem trước thao tác quay lại sẽ không còn nữa. Ảnh động hệ thống (chẳng hạn như quay lại trang chủ, giữa các tác vụ và giữa các hoạt động) hiện xuất hiện cho những ứng dụng đã chọn sử dụng tính năng xem trước thao tác quay lại hoàn toàn hoặc ở cấp độ hoạt động.
Bạn có thể kiểm thử ảnh động quay lại màn hình chính này (như mô tả trong phần sau của 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 OnBackPressedCallback có khả năng tương thích ngược trong AndroidX Activity 1.6.0 trở lên hoặc API nền tảng OnBackInvokedCallback mới.
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.
Xử lý cử chỉ quay lại tuỳ chỉnh trong Compose
Compose cung cấp thành phần kết hợp PredictiveBackHandler để xử lý các cử chỉ quay lại tuỳ chỉnh. API này cho phép bạn phản hồi cử chỉ quay lại và cung cấp một Flow gồm các đối tượng BackEventCompat mà bạn có thể dùng để triển khai các ảnh động hoặc hiệu ứng chuyển đổi tuỳ chỉnh khi người dùng vuốt.
Để sử dụng PredictiveBackHandler, hãy đảm bảo ứng dụng của bạn có phần phụ thuộc androidx.activity:activity-compose (phiên bản 1.8.0 trở lên):
// In your build.gradle.kts file:
dependencies {
implementation("androidx.activity:activity-compose:1.8.0")
}
PredictiveBackHandler(enabled = isBackHandlerEnabled) { progress: Flow<BackEventCompat> -> try { progress.collect { backEvent -> // Update your UI or animation based on backEvent.progress. } // Handle the final back action (e.g., navigate back). } catch (e: CancellationException) { // Back gesture was cancelled, reset your UI. } }
Nếu bạn chỉ cần chặn cử chỉ quay lại mà không cần theo dõi tiến trình, hãy sử dụng BackHandler.
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
Tính năng xem trước thao tác quay lại được bật theo mặc định.
Nếu ứng dụng của bạn dùng Mảnh (Fragment) hoặc Thành phần điều hướng (Navigation component), hãy nâng cấp lên tối thiểu là AndroidX Activity 1.6.0.
Cập nhật một ứng dụng sử 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.
| 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) |
| 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 |
Di chuyển cách triển khai tính năng đ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.
Để đảm bảo rằng các API vốn đang sử dụng OnBackPressedDispatcher (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 trở lên.
// In your build.gradle file:
dependencies {
// Add this in addition to your other dependencies
implementation "androidx.activity:activity:1.6.0"
}
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ý thao tác Quay lại của hệ thống sang
OnBackPressedDispatchercủ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
OnBackPressedCallbackkhi 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 bằng
OnBackPressedhoặcKeyEvent.KEYCODE_BACK.Đảm bảo bạn đã nâng cấp lên AndroidX Activity 1.6.0 trở lên.
// In your build.gradle file: dependencies { // Add this in addition to your other dependencies implementation "androidx.activity:activity:1.6.0" }
Chọn không sử dụng tính năng xem trước thao tác quay lại
Để chọn không sử dụng, trong AndroidManifest.xml, trong thẻ <application>, hãy đặt cờ android:enableOnBackInvokedCallback thành false.
<application
...
android:enableOnBackInvokedCallback="false"
... >
...
</application>
Nếu bạn đặt giá trị này thành false, thì hệ thống sẽ làm như 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ọiOnBackPressedCallbackvẫn hoạt động.
Chọn không sử dụng tính năng ở cấp độ hoạt động
Cờ android:enableOnBackInvokedCallback cho phép bạn chọn không sử dụng ảnh động xem trước của hệ thống ở cấp hoạt động. Hành vi này giúp bạn dễ dàng quản lý việc di chuyển các ứng dụng lớn có nhiều hoạt động sang sử dụng tính năng xem trước thao tác quay lại.
Đoạn mã sau đây là ví dụ về enableOnBackInvokedCallback được đặt để bật ảnh động quay lại trang chủ của hệ thống từ MainActivity:
<manifest ...>
<application . . .
android:enableOnBackInvokedCallback="false">
<activity
android:name=".MainActivity"
android:enableOnBackInvokedCallback="true"
...
</activity>
<activity
android:name=".SecondActivity"
android:enableOnBackInvokedCallback="false"
...
</activity>
</application>
</manifest>
Khi sử dụng cờ android:enableOnBackInvokedCallback, hãy lưu ý những điểm cần cân nhắc sau đây:
- Việc thiết lập
android:enableOnBackInvokedCallback=falsesẽ tắt ảnh động xem trước thao tác quay lại ở cấp hoạt động hoặc cấp ứng dụng, tuỳ thuộc vào nơi bạn thiết lập thẻ và hướng dẫn hệ thống bỏ qua các lệnh gọi đến API nền tảngOnBackInvokedCallback. Tuy nhiên, các lệnh gọi đếnOnBackPressedCallbacksẽ tiếp tục chạy vìOnBackPressedCallbackcó khả năng tương thích ngược và sẽ gọionBackPressedAPI (không hỗ trợ trước Android 13). - Việc thiết lập cờ
enableOnBackInvokedCallbackở cấp ứng dụng sẽ thiết lập giá trị mặc định cho tất cả hoạt động trong ứng dụng. Bạn có thể ghi đè giá trị mặc định đối với mỗi hoạt động bằng cách thiết lập cờ ở cấp hoạt động, như minh hoạ trong đoạn mã ví dụ trước.
Nguyên tắc gọi lại
Hãy tuân thủ các nguyên tắc sau khi dùng lệnh gọi lại hệ thống được hỗ trợ:
PredictiveBackHandler hoặc 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ư
StateFlowhoặ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. Tránh mẫu này 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ị hộp thoại hoặc chạy ảnh động.
Nếu ứng dụng của bạn bật OnBackPressedCallback hoặc OnBackInvokedCallback bằng PRIORITY_DEFAULT hoặc PRIORITY_OVERLAY, thì ảnh động xem trước thao tác quay lại sẽ không chạy và bạn phải xử lý sự kiện quay lại. Đừng tạo các lệnh gọi lại này để chạy logic nghiệp vụ hoặc để ghi nhật ký.
Hãy sử dụng các phương pháp sau nếu ứng dụng của bạn phải chạy logic nghiệp vụ hoặc ghi nhật ký khi người dùng vuốt để quay lại:
- Trong Compose: Ghi nhật ký trong lệnh gọi lại
onCleared()củaViewModelđược liên kết với đích đến của Compose. Đây là tín hiệu tốt nhất để biết thời điểm một đích đến của Compose bị kéo ra khỏi ngăn xếp lui và bị huỷ. - Trên Android 16 trở lên: Sử dụng
OnBackInvokedCallbackvớiPRIORITY_SYSTEM_NAVIGATION_OBSERVER. Thao tác này sẽ tạo một lệnh gọi lại của trình quan sát không sử dụng sự kiện quay lại. Ví dụ: bạn có thể đăng ký lệnh gọi lại này khi người dùng vuốt ngược lại từ hoạt động gốc (rời khỏi ứng dụng của bạn) để ghi lại sự kiện quay lại hoặc chạy logic nghiệp vụ trong khi vẫn cho phép hiệu ứng quay lại màn hình chính phát. - Trong các ứng dụng dựa trên khung hiển thị: Ghi nhật ký trong các lệnh gọi lại vòng đời hoặc ngăn xếp lùi thay vì sử dụng các sự kiện quay lại:
- Đối với các hiệu ứng chuyển đổi hoạt động, hãy kiểm tra xem
isFinishingcó phải làtruetrongActivity.onDestroy()hay không. - Đối với các hiệu ứng chuyển đổi giữa các mảnh, hãy kiểm tra xem
isRemovingcó phải làtruetrong vòng đời khung hiển thịonDestroy()của Mảnh hay không, hoặc sử dụngFragmentManager.OnBackStackChangedListener(onBackStackChangeStarted/onBackStackChangeCommitted).
- Đối với các hiệu ứng chuyển đổi hoạt động, hãy kiểm tra xem
Tạo lệnh gọi lại trách nhiệm duy nhất
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 một 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.
Sẽ dễ dàng hơn khi quản lý trạng thái đã bật của một lệnh gọi lại nếu lệnh gọi lại đó chỉ có một trách nhiệm duy nhất. Ví dụ:
Hình 2 cho thấy cách bạn có thể có nhiều lệnh gọi lại trong ngăn xếp, mỗi lệnh gọi lại chịu trách nhiệm cho một việc. Trong Compose, các lệnh gọi lại được đánh giá từ thành phần kết hợp trong cùng đến thành phần kết hợp ngoài cùng và một lệnh gọi lại chỉ chạy nếu các lệnh gọi lại trước đó trong ngăn xếp bị vô hiệu hoá:
- Thông báo "Bạn có chắc chắn..."
PredictiveBackHandlersẽ được bật khi người dùng nhập dữ liệu vào biểu mẫu và tắt trong trường hợp khác. Khi được bật, chế độ này sẽ chặn cử chỉ quay lại để hiển thị hộp thoại xác nhận hoặc ảnh động tuỳ chỉnh trong ứng dụng. BackHandlerở cấp màn hình sẽ chạy nếu lệnh gọi lại trước đó bị tắt. Trong ví dụ này, tính năng này bị tắt.- Lệnh gọi lại
NavHostxử lý thao tác điều hướng quay lại để bật các đích đến khỏi ngăn xếp lui nếu các lệnh gọi lại tuỳ chỉnh trước đó bị vô hiệu hoá. - Cuối cùng, hệ thống sẽ xử lý cử chỉ quay lại nếu tất cả các lệnh gọi lại trước đó bị vô hiệu hoá. Khi ngăn xếp lui ở đích đến gốc, hệ thống sẽ kích hoạt ảnh động ở cấp hệ thống, chẳng hạn như quay lại trang chủ, giữa các hoạt động và tác vụ.
Hành vi ngăn xếp tương tự cũng áp dụng trong các ứng dụng dựa trên Khung hiển thị: OnBackPressedCallback được bật và thêm gần đây nhất sẽ được ưu tiên, quay lại FragmentManager và cuối cùng là xử lý thao tác quay lại của hệ thống.
Kiểm thử ảnh động xem trước thao tác quay lại
Kể từ Android 15, ảnh động hệ thống (chẳng hạn như ảnh động quay lại trang chủ, giữa các tác vụ và giữa các hoạt động) sẽ được bật theo mặc định cho những ứng dụng hỗ trợ chế độ xem trước thao tác quay lại. Các tính năng này không còn nằm trong phần tuỳ chọn cho nhà phát triển nữa.
Trên thiết bị chạy Android 13 hoặc Android 14, 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 như trong Hình 1:
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.