WebView
là một thành phần thường được sử dụng. Thành phần này cung cấp hệ thống quản lý trạng thái tiên tiến. WebView
phải giữ nguyên trạng thái và vị trí cuộn khi có những thay đổi về cấu hình. WebView
có thể rời khỏi vị trí cuộn khi người dùng xoay thiết bị hoặc mở gập màn hình điện thoại, buộc người dùng phải cuộn lại từ đầu WebView
đến vị trí cuộn trước đó.
WebView
thích hợp trong việc quản lý trạng thái. Bạn có thể tận dụng tính năng này bằng cách quản lý càng nhiều thay đổi cấu hình càng tốt để giảm thiểu số lần tạo lại WebView
. Ứng dụng của bạn nên xử lý các thay đổi về cấu hình vì việc tạo lại hoạt động (cách xử lý các thay đổi về cấu hình của hệ thống) sẽ tạo lại WebView
, khiến WebView
bị mất trạng thái.
Quản lý trạng thái
Tránh tạo lại Activity
nhiều nhất có thể trong quá trình thay đổi cấu hình và để WebView
mất hiệu lực để thành phần này có thể thay đổi kích thước trong khi vẫn giữ nguyên trạng thái.
Cách quản lý trạng thái WebView
:
- Khai báo các thay đổi về cấu hình do ứng dụng của bạn xử lý
- Vô hiệu hoá trạng thái
WebView
1. Thêm thay đổi cấu hình vào tệp AndroidManifest.xml
của ứng dụng
Tránh tạo lại hoạt động bằng cách chỉ định thay đổi cấu hình do ứng dụng của bạn xử lý (thay vì để hệ thống xử lý):
<activity
android:name=".MyActivity"
android:configChanges="screenLayout|orientation|screenSize
|keyboard|keyboardHidden|smallestScreenSize" />
2. Vô hiệu hoá WebView
bất cứ khi nào ứng dụng của bạn nhận thấy có sự thay đổi về cấu hình
Kotlin
override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) webView.invalidate() }
Java
@Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); webview.invalidate(); }
Bước này chỉ áp dụng cho hệ thống khung hiển thị, vì Jetpack Compose không cần vô hiệu hoá bất kỳ thứ gì để đổi kích thước các phần tử Composable
một cách chính xác. Tuy nhiên, Compose sẽ thường xuyên tạo lại WebView
nếu không được quản lý đúng cách.
Điểm chính
android:configChanges
: Thuộc tính của phần tử tệp kê khai<activity>
. Liệt kê các thay đổi về cấu hình do hoạt động xử lý.View#invalidate()
: Phương thức khiến khung hiển thị được vẽ lại. Kế thừa từWebView
.
Kết quả
Giờ đây, các thành phần WebView
của ứng dụng đã giữ nguyên trạng thái và vị trí cuộn khi cấu hình có nhiều sự thay đổi, như thay đổi kích thước, thay đổi hướng hoặc trạng thái gập/mở thiết bị.
Các bộ sưu tập chứa hướng dẫn này
Hướng dẫn này là một phần của các bộ sưu tập Hướng dẫn nhanh được tuyển chọn này, bao gồm các mục tiêu phát triển Android rộng hơn:
![](https://developer.android.google.cn/static/images/quick-guides/collection-illustration.png?hl=vi)