Savedstate

Viết các thành phần thay thế được để lưu trạng thái giao diện người dùng khi một quy trình ngừng hoạt động và khôi phục trạng thái này khi quy trình đó bắt đầu lại.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 11 tháng 12 năm 2024 1.2.1 - - 1.3.0-alpha06

Khai báo phần phụ thuộc

Để thêm một phần phụ thuộc vào SavedState, bạn phải thêm kho lưu trữ Google Maven vào dự án. Hãy đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.

Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle cho ứng dụng hoặc mô-đun:

Groovy

dependencies {
    // Java language implementation
    implementation "androidx.savedstate:savedstate:1.2.1"

    // Kotlin
    implementation "androidx.savedstate:savedstate-ktx:1.2.1"
}

Kotlin

dependencies {
    // Java language implementation
    implementation("androidx.savedstate:savedstate:1.2.1")

    // Kotlin
    implementation("androidx.savedstate:savedstate-ktx:1.2.1")
}

Để biết thêm thông tin về các phần phụ thuộc, hãy xem bài viết Thêm phần phụ thuộc vào bản dựng.

Ý kiến phản hồi

Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Hãy xem tài liệu về Công cụ theo dõi lỗi để biết thêm thông tin.

Phiên bản 1.3

Phiên bản 1.3.0-alpha06

Ngày 11 tháng 12 năm 2024

Phát hành androidx.savedstate:savedstate-*:1.3.0-alpha06. Phiên bản 1.3.0-alpha06 bao gồm các thay đổi sau.

Tính năng mới

  • SavedState KMP hiện hỗ trợ: IBinder, Size, SizeF, Array<Parcelable>, SparseArray<Parcelable> và Serializable (Android). (I1ba94, b/334076622)
  • Thêm các thực thể KSerializer có thể dùng để mã hoá/giải mã các loại Java và Android mà Bundle hỗ trợ bằng cách đánh dấu trường có liên quan trong lớp bằng @Serializable(with = ParcelableSerializer::class). (I8c10f, I28caf, b/376026712)
  • Giờ đây, bạn có thể phân giải các thực thể SavedStateRegistryOwner được truy xuất qua findViewTreeSavedStateRegistryOwner thông qua các thành phần mẹ không liên kết của một thành phần hiển thị, chẳng hạn như ViewOverlay. Hãy xem ghi chú phát hành của core hoặc tài liệu trong ViewTree.setViewTreeDisjointParent để biết thêm thông tin về thành phần hiển thị mẹ không liên kết. (Iccb33)

Thay đổi về API

  • Giúp việc đặt tên và sắp xếp gói nhất quán hơn với SavedStateRegistryOwnerDelegate (I8c135, b/376026744)

Phiên bản 1.3.0-alpha05

Ngày 13 tháng 11 năm 2024

Phát hành androidx.savedstate:savedstate-*:1.3.0-alpha05. Phiên bản 1.3.0-alpha05 bao gồm các thay đổi sau.

Hỗ trợ chuyển đổi tuần tự KotlinX

  • SavedState hiện hỗ trợ tính năng chuyển đổi tuần tự KotlinX. Bạn có thể chuyển đổi một lớp được chú thích bằng @Serializable thành SavedState bằng cách sử dụng các phương thức encodeToSavedStatedecodeFromSavedState. SavedState được trả về là một Bundle thông thường trên Android và có thể được sử dụng bởi mọi API chấp nhận Bundle. (I6f59f, b/374102924)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    fun main() {
        val person = Person("John", "Doe")
        val encoded: SavedState = encodeToSavedState(person)
        val decoded: Person = decodeFromSavedState(encoded)
    }
    
  • Chúng tôi cũng đã đưa vào saved, một trình uỷ quyền thuộc tính tải lười, để dễ dàng lưu trữ các lớp @Serializable trong SavedStateRegistryOwner (ví dụ: ComponentActivity, Fragment, v.v.) và tự động khôi phục các lớp đó trong quá trình ngừng hoạt động và tạo lại quy trình. Xin lưu ý rằng đối tượng uỷ quyền saved là lazy và sẽ không gọi hàm lambda init hoặc lưu bất kỳ nội dung nào vào SavedStateRegistry cho đến khi được truy cập. (I66739, b/376027806)

    @Serializable
    data class Person(val firstName: String, val lastName: String)
    
    class MyActivity : ComponentActivity() {
        var person by saved { Person("John", "Doe") }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            this.person = Person("Jane", "Doe")
        }
    }
    
  • Có một thuộc tính uỷ quyền saved tương tự cho SavedStateHandle được thêm vào Vòng đời 2.9.0-alpha07.

Thay đổi về API

  • Thêm toMap vào SavedState, cho phép chuyển đổi bất kỳ SavedState nào thành Map thông thường (bản sao nông). (I487b9, b/334076622)
  • SavedState KMP hiện hỗ trợ các mảng. (Ic0552, b/334076622)

Phiên bản 1.3.0-alpha04

Ngày 30 tháng 10 năm 2024

Phát hành androidx.savedstate:savedstate-*:1.3.0-alpha04. Phiên bản 1.3.0-alpha04 bao gồm các thay đổi sau.

Thay đổi về API

Phiên bản 1.3.0-alpha03

Ngày 16 tháng 10 năm 2024

Phát hành androidx.savedstate:savedstate-*:1.3.0-alpha03 mà không có thay đổi đáng kể nào. Phiên bản 1.3.0-alpha03 bao gồm các thay đổi sau.

Phiên bản 1.3.0-alpha02

Ngày 2 tháng 10 năm 2024

Phát hành androidx.savedstate:savedstate-*:1.3.0-alpha02. Phiên bản 1.3.0-alpha02 bao gồm các thay đổi sau.

Kotlin Multiplatform

  • Mô-đun SavedState hiện đã tương thích với KMP. Các nền tảng được hỗ trợ hiện bao gồm Android, iOS, Linux, Mac và môi trường máy tính để bàn JVM. (I26305, b/334076622)

Tính năng mới

  • Giới thiệu loại mờ SavedState dưới dạng một bản tóm tắt để cung cấp cách nhất quán để lưu và khôi phục trạng thái ứng dụng trong KMP. Tệp này bao gồm SavedStateReaderSavedStateWriter để sửa đổi trạng thái cần lưu. Trên Android, SavedState là bí danh loại cho Bundle, đảm bảo khả năng tương thích nhị phân và tạo điều kiện di chuyển các API hiện có sang một nhóm tài nguyên chung. Trên các nền tảng khác, SavedState là một thực thể Map<String, Any>. (I18575, b/334076622)
  // Create a new SavedState object using the savedState DSL:
  val savedState = savedState {
    putInt("currentPage", 1)
    putString("filter", "favorites")
  }

  // Read from a SavedState object
  val currentPage = savedState.read { getInt("currentPage") }

  // Edit an existing SavedState object
  savedState.write {
    remove("currentPage")
  }

Thay đổi về API

  • SavedStateRegistrySavedStateRegistryController hiện đã tương thích với KMP. (Id7bb8, b/334076622)
  • SavedState, SavedStateWriterSavedStateReader hiện tương thích với KMP. (I26305, b/334076622)

Phiên bản 1.3.0-alpha01

Ngày 7 tháng 8 năm 2024

Phát hành androidx.savedstate:savedstate:1.3.0-alpha01androidx.savedstate:savedstate-ktx:1.3.0-alpha01. Phiên bản 1.3.0-alpha01 bao gồm các thay đổi sau.

Thay đổi về API

  • Các tiện ích kotlin savedstate-ktx hiện đã được chuyển sang mô-đun savedstate cơ sở. (I1cc18, b/274803094)

Lưu ý

  • Cập nhật compileSdk lên 35 (5dc41be)

Phiên bản 1.2.1

Phiên bản 1.2.1

Ngày 22 tháng 3 năm 2023

Phát hành androidx.savedstate:savedstate:1.2.1androidx.savedstate:savedstate-ktx:1.2.1. Phiên bản 1.2.1 bao gồm các thay đổi sau.

Thông tin cập nhật về phần phụ thuộc

Phiên bản 1.2.0

Phiên bản 1.2.0

Ngày 29 tháng 6 năm 2022

Phát hành androidx.savedstate:savedstate:1.2.0androidx.savedstate:savedstate-ktx:1.2.0. Phiên bản 1.2.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 1.1.0

  • SavedStateRegistryController nay cho phép sớm đính kèm SavedStateRegistry thông qua performAttach().
  • Giờ đây, bạn có thể truy xuất SavedStateProvider được đăng ký trước đó từ SavedStateRegistry qua getSavedStateProvider().
  • Thư viện SavedState đã được viết lại bằng Kotlin.
    • Đối với SavedStateRegistryOwner, đây là một thay đổi không tương thích với nguồn cho các lớp được viết bằng Kotlin – giờ đây, bạn phải ghi đè thuộc tính savedStateRegistry thay vì triển khai hàm getSavedStateRegistry() trước đó.
    • Đối với ViewTreeSavedStateRegistryOwner, đây là một thay đổi không tương thích với nguồn cho các lớp được viết bằng Kotlin – giờ đây, bạn phải nhập trực tiếp và sử dụng phương thức mở rộng Kotlin trên View của androidx.savedstate.setViewTreeSavedStateRegistryOwnerandroidx.savedstate.findViewTreeSavedStateRegistryOwner để đặt và tìm chủ sở hữu đã đặt trước đó. Thao tác này sẽ thay thế API savedstate-ktx của findViewTreeSavedStateRegistryOwner.

Thay đổi về hành vi

  • SavedStateRegistry không thể lưu Gói (Bundle) rỗng nữa nếu không có trạng thái lưu.

Phiên bản 1.2.0-rc01

Ngày 11 tháng 5 năm 2022

Phát hành androidx.savedstate:savedstate:1.2.0-rc01androidx.savedstate:savedstate-ktx:1.2.0-rc01. Phiên bản 1.2.0-rc01 bao gồm các thay đổi sau.

Thay đổi về tài liệu

  • Kdocs SavedStateRegistryOwner đã được cập nhật để làm rõ trách nhiệm và hợp đồng của chủ sở hữu về cách triển khai giao diện cũng như thời điểm họ nên gọi các phương thức trên SavedStateRegistryController. (Iefc95, b/228887344)

Phiên bản 1.2.0-beta01

Ngày 20 tháng 4 năm 2022

Phát hành androidx.savedstate:savedstate:1.2.0-beta01androidx.savedstate:savedstate-ktx:1.2.0-beta01. Phiên bản 1.2.0-beta01 bao gồm các thay đổi sau.

Thay đổi API

  • Các lớp SavedStateRegistryViewTreeSavedStateRegistryOwner đã được viết lại trong Kotlin. Đối với ViewTreeSavedStateRegistryOwner, đây là thay đổi không tương thích nguồn đối với các lớp được viết bằng Kotlin – bạn phải nhập trực tiếp và sử dụng phương thức mở rộng Kotlin trên View của androidx.savedstate.setViewTreeSavedStateRegistryOwnerandroidx.savedstate.findViewTreeSavedStateRegistryOwner để đặt và tìm chủ sở hữu đã đặt trước đó. Thao tác này sẽ thay thế API savedstate-ktx của findViewTreeSavedStateRegistryOwner. Tệp này tương thích với tệp nhị phân và vẫn tương thích với nguồn triển khai bằng ngôn ngữ lập trình Java. (b/220191285)

Version 1.2.0-alpha02

Ngày 6 tháng 4 năm 2022

Phát hành androidx.savedstate:savedstate:1.2.0-alpha02androidx.savedstate:savedstate-ktx:1.2.0-alpha02. Phiên bản 1.2.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, bạn có thể truy xuất SavedStateProvider được đăng ký trước đó từ SavedStateRegistry qua getSavedStateProvider(). (I7ea47, b/215406268)

Thay đổi API

  • Các lớp SavedStateRegistryOwner, SavedStateRegistryControllerRecreator đã được viết lại trong Kotlin. Đối với SavedStateRegistryOwner, đây là một thay đổi không tương thích với nguồn cho các lớp được viết bằng Kotlin – giờ đây, bạn phải ghi đè thuộc tính savedStateRegistry thay vì triển khai hàm getSavedStateRegistry() trước đó. Tệp này tương thích với tệp nhị phân và tương thích với nguồn để triển khai bằng ngôn ngữ lập trình Java. (b/220191285)

Phiên bản 1.2.0-alpha01

Ngày 26 tháng 1 năm 2022

Phát hành androidx.savedstate:savedstate:1.2.0-alpha01androidx.savedstate:savedstate-ktx:1.2.0-alpha01. Phiên bản 1.2.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • SavedStateRegistryController nay cho phép sớm đính kèm tệp tin SavedStateRegistry thông qua phương thức performAttach(). (Ice4bf)

Thay đổi về hành vi

  • SavedStateRegistry không thể lưu Gói (Bundle) rỗng nữa nếu không có trạng thái lưu. (aosp/1896865, b/203457956)

Phiên bản 1.1.0

Phiên bản 1.1.0

Ngày 10 tháng 2 năm 2021

Phát hành androidx.savedstate:savedstate:1.1.0androidx.savedstate:savedstate-ktx:1.1.0. Phiên bản 1.1.0 bao gồm các thay đổi sau.

Thay đổi lớn kể từ phiên bản 1.0.0

  • API ViewTreeSavedStateRegistryOwner: API ViewTreeSavedStateRegistryOwner.get(View) mới cho phép bạn truy xuất vào SavedStateRegistry chứa một thực thể View. Bạn cần nâng cấp lên Activity 1.2.0, Fragment 1.3.0AppCompat 1.3.0-alpha01 trở lên để điền chính xác thông tin này.
  • Cấu phần phần mềm savedstate-ktx: Thêm cấu phần phần mềm savedstate-ktx cùng với một tiện ích Kotlin findViewTreeSavedStateRegistryOwner() để làm việc với ViewTreeSavedStateRegistryOwner.

Phiên bản 1.1.0-rc01

Ngày 16 tháng 12 năm 2020

androidx.savedstate:savedstate:1.1.0-rc01androidx.savedstate:savedstate-ktx:1.1.0-rc01 được phát hành mà không có thay đổi nào kể từ 1.1.0-beta01. Phiên bản 1.1.0-rc01 bao gồm các thay đổi sau.

Phiên bản 1.1.0-beta01

Ngày 1 tháng 10 năm 2020

androidx.savedstate:savedstate:1.1.0-beta01androidx.savedstate:savedstate-ktx:1.1.0-beta01 được phát hành mà không có thay đổi nào kể từ 1.1.0-alpha01. Phiên bản 1.1.0-beta01 bao gồm các thay đổi sau.

Phiên bản 1.1.0-alpha01

Ngày 20 tháng 5 năm 2020

Phát hành androidx.savedstate:savedstate:1.1.0-alpha01androidx.savedstate:savedstate-ktx:1.1.0-alpha01. Phiên bản 1.1.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • API ViewTreeSavedStateRegistryOwner.get(View) mới cho phép bạn truy xuất vào SavedStateRegistry chứa một thực thể View. Bạn cần nâng cấp lên Activity 1.2.0-alpha05, Fragment 1.3.0-alpha05AppCompat 1.3.0-alpha01 trở lên để điền chính xác thông tin này. (aosp/1298679)
  • Thêm cấu phần phần mềm savedstate-ktx mới cùng với một tiện ích Kotlin findViewTreeSavedStateRegistryOwner() để làm việc với ViewTreeSavedStateRegistryOwner. (aosp/1299434)

Phiên bản 1.0.0

Phiên bản 1.0.0

Ngày 5 tháng 9 năm 2019

Phát hành androidx.savedstate:savedstate:1.0.0. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Tính năng chính của phiên bản SavedState 1.0.0

androidx.savedstate chuyển dần lên bản phát hành ổn định. Đây là một nhóm các API cho phép các nhà phát triển thêm các thành phần của trình bổ trợ vào xử lý khôi phục/saveInstanceState. Điểm truy cập chính của API là SavedStateRegistry, cung cấp cách truy xuất các trạng thái đã lưu trước đó bằng cách sử dụng consumeRestoredStateForKey và đăng ký một hàm gọi lại (callback) đến registerSavedStateProvider để cung cấp savedstate khi hệ thống yêu cầu.

Phiên bản 1.0.0-rc01

Ngày 2 tháng 7 năm 2019

Phát hành androidx.savedstate:savedstate:1.0.0-rc01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Sửa lỗi

  • Đã sửa quy tắc Proguard chưa chính xác (b/132655499)

Phiên bản 1.0.0-beta01

Ngày 7 tháng 5 năm 2019

Phát hành androidx.savedstate:savedstate:1.0.0-beta01. Bạn có thể xem các thay đổi trong phiên bản này tại đây.

Phiên bản 1.0.0-alpha02

Ngày 13 tháng 3 năm 2019

Phát hành androidx.savedstate:savedstate:1.0.0-alpha02. androidx.savedstate:savedstate gộp các cấu phần phần mềm androidx.savedstate:savedstate-bundle cùng với androidx.savedstate:savedstate-common thành một cấu phần phần mềm nhằm đơn giản hoá cơ sở hạ tầng của savedstate và xoá các phần chung khỏi SavedStateRegistry. Do đó, bạn không cần tách riêng các mô-đun.

Bạn có thể xem danh sách đầy đủ các thay đổi trong phiên bản này tại đây.

Tính năng mới

  • Thêm SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ). Khởi tạo lớp có sẵn được khởi tạo và chạy phương thức AutoRecreated.onRecreated khi thành phần thuộc sở hữu khởi động lại.

Thay đổi về API

  • Xoá bỏ các phần chung SavedStateRegistry<T>
  • Lớp AbstractSavedStateRegistry và BundlableSavedStateRegistry đã bị xoá, hãy thay thế bằng lớp SavedStateRegistry
  • BundleSavedStateRegistryOwner được đổi tên thành SavedStateRegistryOwner.

Phiên bản 1.0.0-alpha01

Ngày 17 tháng 12 năm 2018

Đây là bản phát hành đầu tiên của SavedState.

Tính năng mới

androidx.savedstate là một nhóm các API cho phép các nhà phát triển thêm các thành phần của trình bổ trợ vào xử lý khôi phục/saveInstanceState. Điểm truy cập chính của API là SavedStateRegistry<T>, cung cấp cách truy xuất trạng thái đã lưu trước đó thông qua consumeRestoredStateForKey và đăng ký hàm gọi lại đến registerSavedStateProvider để cung cấp một savedstate khi hệ thống yêu cầu.