Savedstate

כותבים רכיבים נשלפים ששומרים את מצב ממשק המשתמש כשתהליך מסוים מסתיים, ומשחזרים אותו כשהתהליך מופעל מחדש.
העדכון האחרון גרסה יציבה גרסה מועמדת להפצה גרסת בטא גרסה אלפא
13 בנובמבר 2024 1.2.1 - - 1.3.0-alpha05

הצהרת יחסי תלות

כדי להוסיף תלות ב-SavedState, צריך להוסיף את מאגר Google Maven לפרויקט. למידע נוסף, אפשר לקרוא את המאמר מאגר Maven של Google.

מוסיפים את יחסי התלות של הארטיפקטים הנדרשים בקובץ build.gradle של האפליקציה או המודול:

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")
}

מידע נוסף על יחסי תלות זמין במאמר הוספת יחסי תלות ל-build.

משוב

המשוב שלכם עוזר לנו לשפר את Jetpack. אם נתקלתם בבעיות חדשות או שיש לכם רעיונות לשיפור הספרייה הזו, נשמח לשמוע מכם. לפני שיוצרים בעיה חדשה, כדאי לעיין בבעיות הקיימות בספרייה הזו. כדי להצביע על בעיה קיימת, לוחצים על לחצן הכוכב.

דיווח על בעיה חדשה

מידע נוסף זמין במסמכי התיעוד של Issue Tracker.

גרסה 1.3

גרסה 1.3.0-alpha05

13 בנובמבר 2024

androidx.savedstate:savedstate-*:1.3.0-alpha05 משוחרר. גרסת 1.3.0-alpha05 כוללת את ההוספות האלה.

תמיכה בסריאליזציה של KotlinX

  • SavedState כולל עכשיו תמיכה ב-KotlinX Serialization. אפשר להמיר סיווג עם הערה @Serializable לסיווג SavedState באמצעות השיטות encodeToSavedState ו-decodeFromSavedState. הערך SavedState המוחזר הוא Bundle רגיל ב-Android, וכל ממשק API שתומך ב-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)
    }
    
  • הוספנו גם את saved, נציג נכס עצלן, כדי שיהיה קל לאחסן כיתות @Serializable ב-SavedStateRegistryOwner (למשל: ComponentActivity,‏ Fragment וכו') ולאפשר לשחזר אותן באופן אוטומטי לאחר מותו של התהליך וליצור אותן מחדש. חשוב לזכור שהממשק הנציג saved הוא עצלן, והוא לא יבצע קריאה לפונקציית הלמה init או ישמור משהו ב-SavedStateRegistry עד שתתבצע גישה אליו. (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")
        }
    }
    
  • יש גם גרסה דומה של הענקת גישה לנכס saved עבור SavedStateHandle שנוספה במחזור חיים 2.9.0-alpha07.

שינויים ב-API

  • מוסיפים את toMap ל-SavedState, וכך כל SavedState יכול להפוך ל-Map רגיל (העתקה שטחית). (I487b9, ‏ b/334076622)
  • SavedState KMP תומך עכשיו במערכים. (Ic0552, ‏ b/334076622)

גרסה 1.3.0-alpha04

30 באוקטובר 2024

androidx.savedstate:savedstate-*:1.3.0-alpha04 משוחרר. גרסת 1.3.0-alpha04 מכילה את ההוספות האלה.

שינויים ב-API

  • SavedState KMP תומך עכשיו ב-Char. (I9ac2f, ‏ b/334076622)
  • מוסיפים את putNull ו-isNull ל-KMP של SavedState. (Iea71d, ‏ b/334076622)
  • הוספת פרמטרים נוספים של מפעל savedState שתומכים ב-Map<String, Any> ראשוני (I9b37d, ‏ b/334076622)
  • עכשיו יש תמיכה בהשוואה של contentDeepEquals ב-SavedState KMP. (Ia515c, ‏ b/334076622)
  • עכשיו יש ב-SavedState KMP תמיכה ב-Long. (I4c180, ‏ b/334076622)

גרסה 1.3.0-alpha03

16 באוקטובר 2024

androidx.savedstate:savedstate-*:1.3.0-alpha03 פורסם ללא שינויים משמעותיים. גרסת 1.3.0-alpha03 מכילה את ההוספות האלה.

גרסה 1.3.0-alpha02

2 באוקטובר 2024

androidx.savedstate:savedstate-*:1.3.0-alpha02 משוחרר. גרסת 1.3.0-alpha02 כוללת את ההוספות האלה.

Kotlin Multiplatform

  • המודול SavedState תואם עכשיו ל-KMP. הפלטפורמות הנתמכות כוללות עכשיו סביבות שולחן עבודה של Android,‏ iOS,‏ Linux,‏ Mac ו-JVM. (I26305, ‏ b/334076622)

תכונות חדשות

  • הצגת סוג אטום SavedState כאבסוקציה כדי לספק דרך עקבית לשמירה ולשחזור של מצב האפליקציה ב-KMP. הוא כולל את SavedStateReader ו-SavedStateWriter לשינוי המצב שרוצים לשמור. ב-Android, SavedState הוא כינוי לסוג של Bundle, שמבטיח תאימות בינארית ומקל על העברת ממשקי API קיימים לקבוצת מקורות משותפת. בפלטפורמות אחרות, SavedState הוא מכונה של 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")
  }

שינויים ב-API

  • SavedStateRegistry ו-SavedStateRegistryController תואמים עכשיו ל-KMP. (Id7bb8, ‏ b/334076622)
  • SavedState, ‏SavedStateWriter ו-SavedStateReader תואמים עכשיו ל-KMP. (I26305, ‏ b/334076622)

גרסה 1.3.0-alpha01

7 באוגוסט 2024

androidx.savedstate:savedstate:1.3.0-alpha01 ו-androidx.savedstate:savedstate-ktx:1.3.0-alpha01 משוחררים. גרסת 1.3.0-alpha01 מכילה את ההוספות האלה.

שינויים ב-API

  • התוספים של savedstate-ktx ל-Kotlin הועברו למעכשיו למודול הבסיסי של savedstate. (I1cc18, ‏ b/274803094)

הערה

  • עדכון compileSdk ל-35 (5dc41be)

גרסה 1.2.1

גרסה 1.2.1

22 במרץ 2023

androidx.savedstate:savedstate:1.2.1 ו-androidx.savedstate:savedstate-ktx:1.2.1 משוחררים. גרסה 1.2.1 מכילה את השמירות האלה.

עדכוני יחסי תלות

גרסה 1.2.0

גרסה 1.2.0

29 ביוני 2022

androidx.savedstate:savedstate:1.2.0 ו-androidx.savedstate:savedstate-ktx:1.2.0 משוחררים. גרסה 1.2.0 מכילה את ההוספות האלה.

שינויים חשובים מאז גרסה 1.1.0

  • SavedStateRegistryController מאפשר עכשיו לצרף מוקדם את SavedStateRegistry דרך performAttach().
  • עכשיו אפשר לאחזר SavedStateProvider שרשום ב-SavedStateRegistry דרך getSavedStateProvider().
  • ספריית SavedState נכתבה מחדש ב-Kotlin.
    • עבור SavedStateRegistryOwner, זהו שינוי לא תואם למקור לכיתות שנכתבו ב-Kotlin – עכשיו צריך לשנות את ברירת המחדל של המאפיין savedStateRegistry במקום להטמיע את הפונקציה הקודמת getSavedStateRegistry().
    • ב-ViewTreeSavedStateRegistryOwner, זהו שינוי לא תואם למקור עבור הכיתות שנכתבו ב-Kotlin – עכשיו צריך לייבא ישירות את שיטות ההרחבה של Kotlin ב-View של androidx.savedstate.setViewTreeSavedStateRegistryOwner ו-androidx.savedstate.findViewTreeSavedStateRegistryOwner ולהשתמש בהן כדי להגדיר ולמצוא בעלים שהוגדר בעבר. ה-API הזה מחליף את ה-API של savedstate-ktx ב-findViewTreeSavedStateRegistryOwner.

שינויים בהתנהגות

  • SavedStateRegistry לא שומר יותר חבילת Bundle ריקה אם אין מצב שצריך לשמור.

גרסה 1.2.0-rc01

11 במאי 2022

androidx.savedstate:savedstate:1.2.0-rc01 ו-androidx.savedstate:savedstate-ktx:1.2.0-rc01 משוחררים. גרסה 1.2.0-rc01 כוללת את ההוספות האלה.

שינויים במסמכי התיעוד

  • מסמכי ה-Kdocs של SavedStateRegistryOwner עודכנו כדי להבהיר את האחריות והחוזה של הבעלים לגבי האופן שבו הוא צריך להטמיע את הממשק או מתי הוא צריך להפעיל את השיטות ב-SavedStateRegistryController. (Iefc95, ‏ b/228887344)

גרסה 1.2.0-beta01

20 באפריל 2022

androidx.savedstate:savedstate:1.2.0-beta01 ו-androidx.savedstate:savedstate-ktx:1.2.0-beta01 משוחררים. גרסה 1.2.0-beta01 כוללת את ההצהרות האלה.

שינויים ב-API

  • הכיתות SavedStateRegistry ו-ViewTreeSavedStateRegistryOwner נכתבו מחדש ב-Kotlin. ב-ViewTreeSavedStateRegistryOwner, זהו שינוי לא תואם למקור עבור הכיתות שנכתבו ב-Kotlin – עכשיו צריך לייבא ישירות את שיטות ההרחבה של Kotlin ב-View של androidx.savedstate.setViewTreeSavedStateRegistryOwner ו-androidx.savedstate.findViewTreeSavedStateRegistryOwner ולהשתמש בהן כדי להגדיר ולמצוא בעלים שהוגדר בעבר. ה-API הזה מחליף את ה-API של savedstate-ktx ב-findViewTreeSavedStateRegistryOwner. הקוד הזה תואם לקוד הבינארי ותמיד תואם למקור של הטמעות שנכתבו בשפת התכנות Java. (b/220191285)

גרסה 1.2.0-alpha02

6 באפריל 2022

androidx.savedstate:savedstate:1.2.0-alpha02 ו-androidx.savedstate:savedstate-ktx:1.2.0-alpha02 משוחררים. גרסה 1.2.0-alpha02 מכילה את ההוספות האלה.

תכונות חדשות

  • עכשיו אפשר לאחזר SavedStateProvider שרשום ב-SavedStateRegistry דרך getSavedStateProvider(). (I7ea47, ‏ b/215406268)

שינויים ב-API

  • המחלקות SavedStateRegistryOwner,‏ SavedStateRegistryController ו-Recreator נכתבו מחדש ב-Kotlin. עבור SavedStateRegistryOwner, זהו שינוי לא תואם למקור לכיתות שנכתבו ב-Kotlin – עכשיו צריך לשנות את ברירת המחדל של המאפיין savedStateRegistry במקום להטמיע את הפונקציה הקודמת getSavedStateRegistry(). הספרייה תואמת לקבצים הבינאריים ולקוד המקור של הטמעות שנכתבו בשפת התכנות Java. (b/220191285)

גרסה 1.2.0-alpha01

26 בינואר 2022

androidx.savedstate:savedstate:1.2.0-alpha01 ו-androidx.savedstate:savedstate-ktx:1.2.0-alpha01 משוחררים. גרסה 1.2.0-alpha01 כוללת את ההוספות האלה.

תכונות חדשות

  • עכשיו אפשר לצרף את SavedStateRegistry מוקדם יותר באמצעות performAttach() ב-SavedStateRegistryController. (Ice4bf)

שינויים בהתנהגות

  • SavedStateRegistry לא שומר יותר חבילת Bundle ריקה אם אין מצב שצריך לשמור. (aosp/1896865, ‏ b/203457956)

גרסה 1.1.0

גרסה 1.1.0

10 בפברואר 2021

androidx.savedstate:savedstate:1.1.0 ו-androidx.savedstate:savedstate-ktx:1.1.0 משוחררים. גרסה 1.1.0 כוללת את השמירות האלה.

שינויים משמעותיים מאז גרסה 1.0.0

  • ViewTreeSavedStateRegistryOwner API: ממשק API חדש של ViewTreeSavedStateRegistryOwner.get(View) שמאפשר לאחזר את SavedStateRegistry שמכיל את המופע של View. כדי לאכלס את השדה הזה בצורה נכונה, צריך לשדרג ל-Activity 1.2.0, ל-Fragment 1.3.0 ול-AppCompat 1.3.0-alpha01 ואילך.
  • ארטיפקט savedstate-ktx: הארטיפקט החדש savedstate-ktx נוסף עם תוסף findViewTreeSavedStateRegistryOwner() Kotlin לעבודה עם ViewTreeSavedStateRegistryOwner.

גרסה 1.1.0-rc01

16 בדצמבר 2020

הגרסאות androidx.savedstate:savedstate:1.1.0-rc01 ו-androidx.savedstate:savedstate-ktx:1.1.0-rc01 פורסמו ללא שינויים מאז 1.1.0-beta01. גרסה 1.1.0-rc01 כוללת את השמירות האלה.

גרסה 1.1.0-beta01

1 באוקטובר 2020

הגרסאות androidx.savedstate:savedstate:1.1.0-beta01 ו-androidx.savedstate:savedstate-ktx:1.1.0-beta01 פורסמו ללא שינויים מאז 1.1.0-alpha01. גרסה 1.1.0-beta01 כוללת את ההצהרות האלה.

גרסה 1.1.0-alpha01

20 במאי 2020

androidx.savedstate:savedstate:1.1.0-alpha01 ו-androidx.savedstate:savedstate-ktx:1.1.0-alpha01 משוחררים. גרסה 1.1.0-alpha01 כוללת את ההוספות האלה.

תכונות חדשות

  • ממשק API חדש של ViewTreeSavedStateRegistryOwner.get(View) מאפשר לאחזר את ה-SavedStateRegistry שמכיל את המופע של View. כדי לאכלס את השדה הזה בצורה נכונה, צריך לשדרג ל-Activity 1.2.0-alpha05, ל-Fragment 1.3.0-alpha05 ול-AppCompat 1.3.0-alpha01. (aosp/1298679)
  • נוספה גרסת הארטיפקט החדשה savedstate-ktx עם תוסף findViewTreeSavedStateRegistryOwner() ל-Kotlin לעבודה עם ViewTreeSavedStateRegistryOwner. (aosp/1299434)

גרסה 1.0.0

גרסה 1.0.0

5 בספטמבר 2019

androidx.savedstate:savedstate:1.0.0 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תכונות עיקריות של SavedState 1.0.0

androidx.savedstate הועברה לגרסה יציבה. זוהי קבוצה של ממשקי API שמאפשרים למפתחים להוסיף רכיבים לתהליך השחזור או לשמירת ה-InstanceState. נקודת הכניסה הראשית של ה-API היא SavedStateRegistry, שמספקת דרך לאחזר מצבים שנשמרו בעבר באמצעות consumeRestoredStateForKey ולרשום קריאה חוזרת (callback) ל-registerSavedStateProvider כדי לספק מצב שמור ברגע שהמערכת מבקשת זאת.

גרסה 1.0.0-rc01

2 ביולי 2019

androidx.savedstate:savedstate:1.0.0-rc01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

תיקוני באגים

גרסה 1.0.0-beta01

7 במאי 2019

androidx.savedstate:savedstate:1.0.0-beta01 משוחרר. כאן אפשר למצוא את ההתחייבויות (commits) שכלולות בגרסה הזו.

גרסה 1.0.0-alpha02

13 במרץ 2019

androidx.savedstate:savedstate:1.0.0-alpha02 משוחרר. androidx.savedstate:savedstate משלבת את הפריטים androidx.savedstate:savedstate-bundle ו-androidx.savedstate:savedstate-common לפריט אחד, כי הוחלט לפשט את התשתית של savedstate ולהסיר את הפריטים הכלליים מ-SavedStateRegistry. לכן אין צורך במודולים נפרדים.

כאן אפשר למצוא את הרשימה המלאה של השינויים שכלולים בגרסה הזו.

תכונות חדשות

  • צירפנו את SavedStateRegistry.runOnNextRecreaction(Class<? extends AutoRecreated> clazz ) למרחב המשותף. הכיתה הנתונה תיווצר והשיטה AutoRecreated.onRecreated תופעל כשהרכיב הבעלים יופעל מחדש.

שינויים ב-API

  • תרופות גנריות הוסרו מ-SavedStateRegistry<T>
  • AbstractSavedStateRegistry ו-BundlableSavedStateRegistry הוסרו. במקום זאת, צריך להשתמש ב-SavedStateRegistry פשוט
  • השם של BundleSavedStateRegistryOwner השתנה ל-SavedStateRegistryOwner

גרסה 1.0.0-alpha01

17 בדצמבר 2018

זו הגרסה הראשונה של SavedState.

תכונות חדשות

androidx.savedstate היא קבוצה חדשה של ממשקי API בגרסת אלפא שמאפשרים למפתחים להוסיף רכיבים לתהליך השחזור או לשמירת ה-InstanceState. נקודת הכניסה הראשית של ה-API היא SavedStateRegistry<T>, שמספקת דרך לאחזר מצב ששמור בעבר באמצעות consumeRestoredStateForKey ולרשום קריאה חוזרת (callback) ל-registerSavedStateProvider כדי לספק מצב ששמור ברגע שהמערכת מבקשת זאת.