DataStore

จัดเก็บข้อมูลแบบอะซิงโครนัส สอดคล้องกัน และเป็นธุรกรรม ซึ่งช่วยเอาชนะข้อเสียบางประการของ SharedPreferences
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า รุ่นอัลฟ่า
12 ตุลาคม 2026 1.2.1 1.3.0-rc01 - -

ประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ใน DataStore คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google

DataStore มีตัวเลือกต่างๆ สำหรับการทำให้เป็นอนุกรม ให้เลือกตัวเลือกใดตัวเลือกหนึ่ง นอกจากนี้ คุณยังเพิ่มการอ้างอิงที่ไม่มี Android ลงในการใช้งานอย่างใดอย่างหนึ่งได้ด้วย

เพิ่มทรัพยากร Dependency สำหรับการติดตั้งใช้งานที่ต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูล ดังนี้

Preferences DataStore

เพิ่มบรรทัดต่อไปนี้ลงในส่วนทรัพยากร Dependency ของไฟล์ Gradle

Groovy

    dependencies {
        // Preferences DataStore (SharedPreferences like APIs)
        implementation "androidx.datastore:datastore-preferences:1.2.1"

        // Alternatively - without an Android dependency.
        implementation "androidx.datastore:datastore-preferences-core:1.2.1"
    }
    

Kotlin

    dependencies {
        // Preferences DataStore (SharedPreferences like APIs)
        implementation("androidx.datastore:datastore-preferences:1.2.1")

        // Alternatively - without an Android dependency.
        implementation("androidx.datastore:datastore-preferences-core:1.2.1")
    }
    

หากต้องการเพิ่มการรองรับ RxJava (ไม่บังคับ) ให้เพิ่มทรัพยากร Dependency ต่อไปนี้

Groovy

    dependencies {
        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-preferences-rxjava2:1.2.1"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-preferences-rxjava3:1.2.1"
    }
    

Kotlin

    dependencies {
        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-preferences-rxjava2:1.2.1")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-preferences-rxjava3:1.2.1")
    }
    

DataStore

เพิ่มบรรทัดต่อไปนี้ลงในส่วนทรัพยากร Dependency ของไฟล์ Gradle

Groovy

    dependencies {
        // Typed DataStore for custom data objects (for example, using Proto or JSON).
        implementation "androidx.datastore:datastore:1.2.1"

        // Alternatively - without an Android dependency.
        implementation "androidx.datastore:datastore-core:1.2.1"
    }
    

Kotlin

    dependencies {
        // Typed DataStore for custom data objects (for example, using Proto or JSON).
        implementation("androidx.datastore:datastore:1.2.1")

        // Alternatively - without an Android dependency.
        implementation("androidx.datastore:datastore-core:1.2.1")
    }
    

เพิ่มทรัพยากร Dependency ที่ไม่บังคับต่อไปนี้สำหรับการรองรับ RxJava

Groovy

    dependencies {
        // optional - RxJava2 support
        implementation "androidx.datastore:datastore-rxjava2:1.2.1"

        // optional - RxJava3 support
        implementation "androidx.datastore:datastore-rxjava3:1.2.1"
    }
    

Kotlin

    dependencies {
        // optional - RxJava2 support
        implementation("androidx.datastore:datastore-rxjava2:1.2.1")

        // optional - RxJava3 support
        implementation("androidx.datastore:datastore-rxjava3:1.2.1")
    }
    

หากต้องการทำให้เนื้อหาเป็นแบบอนุกรม ให้เพิ่มการอ้างอิงสำหรับการทำให้เป็นอนุกรมของ Protocol Buffers หรือ JSON

การซีเรียลไลซ์ JSON

หากต้องการใช้การซีเรียลไลซ์ JSON ให้เพิ่มค่าต่อไปนี้ลงในไฟล์ Gradle

Groovy

    plugins {
        id("org.jetbrains.kotlin.plugin.serialization") version "2.2.20"
    }

    dependencies {
        implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0"
    }
    

Kotlin

    plugins {
        id("org.jetbrains.kotlin.plugin.serialization") version "2.2.20"
    }

    dependencies {
        implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0")
    }
    

การทำให้เป็นอนุกรม Protobuf

หากต้องการใช้การซีเรียลไลซ์ Protobuf ให้เพิ่มข้อมูลต่อไปนี้ลงในไฟล์ Gradle

Groovy

    plugins {
        id("com.google.protobuf") version "0.9.5"
    }
    dependencies {
        implementation "com.google.protobuf:protobuf-kotlin-lite:4.32.1"

    }

    protobuf {
        protoc {
            artifact = "com.google.protobuf:protoc:4.32.1"
        }
        generateProtoTasks {
            all().forEach { task ->
                task.builtins {
                    create("java") {
                        option("lite")
                    }
                    create("kotlin")
                }
            }
        }
    }
    

Kotlin

    plugins {
        id("com.google.protobuf") version "0.9.5"
    }
    dependencies {
        implementation("com.google.protobuf:protobuf-kotlin-lite:4.32.1")
    }

    protobuf {
        protoc {
            artifact = "com.google.protobuf:protoc:4.32.1"
        }
        generateProtoTasks {
            all().forEach { task ->
                task.builtins {
                    create("java") {
                        option("lite")
                    }
                    create("kotlin")
                }
            }
        }
    }
    

ความคิดเห็น

ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Issue Tracker

เวอร์ชัน 1.3

เวอร์ชัน 1.3.0-rc01

12 ตุลาคม 2026

androidx.datastore:datastore-*:1.3.0-rc01 เปิดตัวแล้ว เวอร์ชัน 1.3.0-rc01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ใช้ WindowCompat#enableEdgeToEdge(Window) แทน EdgeToEdge#enable() (Ibff3e)

การแก้ไขข้อบกพร่อง

  • อัปเดตทรัพยากร Dependency ของ androidx.lifecycle:lifecycle-runtime เป็น 2.10.0 แล้ว ต้องใช้เวอร์ชันนี้เพื่อให้การตรวจสอบ Lint ของรันไทม์วงจรที่รวมมาทำงานร่วมกับ AGP เวอร์ชัน 9.5.0-alpha04 ขึ้นไปได้ (I99bfd, b/556807521)

เวอร์ชัน 1.3.0-alpha11

9 กันยายน 2569

androidx.datastore:datastore-*:1.3.0-alpha11 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha11 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • เส้นทางไฟล์ที่สำคัญจะไม่รวมอยู่ในข้อความ CorruptionException ที่แสดงขึ้นระหว่างความล้มเหลวในการแยกวิเคราะห์ค่ากำหนด DataStore (Ia9e8f)

เวอร์ชัน 1.3.0-alpha10

29 กรกฎาคม 2026

androidx.datastore:datastore-*:1.3.0-alpha10 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha10 มี คอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • GeneralSecurityException in AeadSerializer is now wrapped in CorruptionException for better CorruptionHandler integration. (I26e56, b/514941919)

เวอร์ชัน 1.3.0-alpha09

6 พฤษภาคม 2026

androidx.datastore:datastore-*:1.3.0-alpha09 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha09 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตั้งค่า ReThrowCorruptionHandler เป็นสาธารณะ (I137bb, b/427722902)
  • ทำให้วงจรการติดตามสอดคล้องกับการติดตามของระบบ (Ib391b)

เวอร์ชัน 1.3.0-alpha08

22 เมษายน 2026

androidx.datastore:datastore-*:1.3.0-alpha08 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha08 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ Origin Private File System (OPFS) ใน DataStore สำหรับแพลตฟอร์มเว็บ การติดตั้งใช้งานนี้จะเปิดตัว WebOpfsStorage และรวมการรองรับสถาปัตยกรรมสำหรับ I/O ไฟล์แบบอะซิงโครนัส การแจ้งเตือนข้ามแท็บโดยใช้ BroadcastChannel API และการล็อกแบบกระจายผ่าน Web Locks API แบบเนทีฟสำหรับการเข้าถึงการเขียนแบบเอกสิทธิ์เฉพาะบุคคล Id7f5807 b/316376114

การเปลี่ยนแปลง API

  • เปิดตัว API WebLocalStorage และ WebSessionStorage สำหรับการจัดการประเภทพื้นที่เก็บข้อมูลที่ชัดเจนในสภาพแวดล้อมเว็บ I35fa259b b/316376114

เวอร์ชัน 1.3.0-alpha07

11 มีนาคม 2026

androidx.datastore:datastore-*:1.3.0-alpha07 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha07 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • การรองรับการเข้ารหัส: เปิดตัวอาร์ติแฟกต์ androidx.datastore:datastore-tink ใหม่ที่รองรับการเข้ารหัส Datastore โดยใช้ไลบรารี Tink โมดูลนี้จะแนะนำ AeadSerializer ซึ่งเป็นคลาส Wrapper ใหม่ที่ใช้ Serializer<T> และใช้ Authenticated Encryption with Associated Data (AEAD) ของ Tink เพื่อเข้ารหัสและถอดรหัสข้อมูล AeadSerializer พร้อมให้ใช้งานในแพลตฟอร์มเป้าหมาย JVM และ Android
  • DataStore Builder API ใหม่: เปิดตัว DataStore.Builder<T> เป็นทางเลือกที่ปรับขนาดได้แทน DataStoreFactory API ใหม่นี้ช่วยให้ผู้ใช้มีวิธีระบุตรรกะความเสียหายของตนเองผ่าน setCorruptionHandler นอกจากนี้ Builder API ยังกำหนดให้เริ่มต้น DataStore โดยใช้ CoroutineContext แทน CoroutineScope ซึ่งเป็นการปรับปรุงเพื่อการทำงานพร้อมกันแบบมีโครงสร้าง เนื่องจากช่วยให้ผู้เรียกกำหนดลักษณะการทำงานของการดำเนินการ (เช่น Dispatcher ที่เฉพาะเจาะจง) ได้โดยไม่ต้องบังคับให้ DataStore จัดการอย่างไม่เหมาะสมหรือถูกจำกัดตามวงจรของขอบเขตของผู้เรียก

    หมายเหตุ: เราขอแนะนำให้ผู้ใช้ทุกคนย้ายข้อมูลจาก DataStoreFactory ไปยัง API DataStore.Builder ใหม่ การกำหนดให้ใช้ CoroutineContext แทน CoroutineScope จะทำให้ API บังคับใช้การทำงานพร้อมกันที่มีโครงสร้างดีขึ้น ซึ่งจะช่วยให้มั่นใจได้ว่าการดำเนินการของ DataStore จะไม่ผูกกับวงจร UI ที่มีอายุสั้น (เช่น viewModelScope) ซึ่งจะช่วยป้องกันการยกเลิกก่อนเวลาอันควรและการสูญหายของข้อมูลที่อาจเกิดขึ้น

    คำเตือน: ตรวจสอบว่า CoroutineContext ที่ระบุให้กับ Builder มี Job และมีขอบเขตระดับแอปพลิเคชัน หากบริบทถูกยกเลิก การดำเนินการภายในของ DataStore จะสิ้นสุดลงก่อนเวลาอันควร

การเปลี่ยนแปลง API

  • เปิดตัวอาร์ติแฟกต์ androidx.datastore:datastore-tink ใหม่สำหรับการรองรับการเข้ารหัส DataStore (Ic106d, b/167697691)

    หากต้องการเข้ารหัสข้อมูลโดยใช้ Tink ให้ทำตามขั้นตอนต่อไปนี้

    1. สร้างคีย์โดยใช้ Tink API ดังนี้

      val keysetHandle =
          AndroidKeysetManager.Builder()
              .withSharedPref(applicationContext, "keyset", "keyset_prefs")
              .withKeyTemplate(KeyTemplate.createFrom(PredefinedAeadParameters.AES256_GCM))
              .withMasterKeyUri("android-keystore://master_key")
              .build()
              .keysetHandle
      
    2. สร้าง AeadSerializer ที่รวม Serializer ที่มีอยู่:

      val aeadSerializer = AeadSerializer(
          // Use tink APIs to create an Aead object to encrypt/decrypt data.
          aead =
              keysetHandle.getPrimitive(
                  RegistryConfiguration.get(),
                  Aead::class.java,
              ),
          // AeadSerializer can wrap an existing serializer.
          wrappedSerializer = ExistingSerializer,
          // Specify a unique name to prevent a ciphertext swapping attack.
          associatedData = "settings.json".encodeToByteArray(),
      )
      
    3. ใช้ aeadSerializer นี้แทน Serializer เมื่อสร้างอินสแตนซ์ Datastore ดังนี้

      val dataStore = dataStore(
          fileName = "settings.json",
          serializer = aeadSerializer,
          scope = scope,
      )
      
  • เปิดตัว DataStore.Builder<T> เป็นทางเลือกที่ทันสมัยและปรับขนาดได้แทน DataStoreFactory (I3b110, b/267785821, b/400507108, b/368385681, b/427722902, b/370838564, b/167697691)

เวอร์ชัน 1.3.0-alpha06

25 กุมภาพันธ์ 2026

androidx.datastore:datastore-*:1.3.0-alpha06 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ DataStore รองรับ androidx.tracing ในแพลตฟอร์มเป้าหมาย Android แล้ว คุณสร้าง DataStore ที่มีการติดตามได้โดยระบุอินสแตนซ์ androidx.tracing.Tracer ให้กับฟังก์ชัน DataStoreFactory.createWithTracing() (I71bc2, b/427722902)

เวอร์ชัน 1.3.0-alpha05

28 มกราคม 2026

androidx.datastore:datastore-*:1.3.0-alpha05 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha05 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มโปรไฟล์พื้นฐานลงใน Datastore แล้ว (3916245,b/469127532)
  • ใช้การรองรับ WASM/JS ใน DataStore ผ่าน localStorage ซึ่งสร้างข้อได้เปรียบที่แตกต่างจากการใช้งาน sessionStorage ที่มีอยู่โดยเปิดใช้การแจ้งเตือนเหตุการณ์และการซิงค์ข้ามแท็บ (I67246, b/441511612)

เวอร์ชัน 1.3.0-alpha04

14 มกราคม 2026

androidx.datastore:datastore-*:1.3.0-alpha04 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha04 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่มฟังก์ชันการคัดลอกยูทิลิตีที่ใช้เพื่ออัปเดตข้อมูลสำหรับค่ากำหนด DataStore ได้ (I70a18, b/467120382)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ข้อมูลไบนารีอาจมีรูปแบบไม่ถูกต้องในระหว่างการจัดเก็บโดยการแทนที่การจัดการสตริง UTF-8 ด้วยการเข้ารหัส Base64 สำหรับเว็บ (Ie3178, b/473790107)

เวอร์ชัน 1.3.0-alpha03

17 ธันวาคม 2025

androidx.datastore:datastore-*:1.3.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha03 มีการเปลี่ยนแปลงเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาการเปลี่ยนชื่อไฟล์ที่เก็บข้อมูลชั่วคราวไม่สำเร็จ (I94f89, b/203087070)
  • แก้ไขปัญหาเพื่อป้องกันไม่ให้การอัปเดตถูกยกเลิกระหว่างการอ่าน/เขียนพร้อมกัน อาจเกิดสภาวะการแข่งขันระหว่างตัวรวบรวมใหม่ใน DataStore.data กับการเรียก updateData พร้อมกัน ซึ่งทําให้ตัวรวบรวมพลาดค่าใหม่ (I6a427, b/431787506)

เวอร์ชัน 1.3.0-alpha02

3 ธันวาคม 2025

androidx.datastore:datastore-*:1.3.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 1.3.0-alpha02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • เพิ่มเป้าหมาย js() ไปยัง androidx.datastore (I1f62b, b/441511612)
  • บังคับใช้การจัดลำดับแบบ FIFO ในการอัปเดต GuavaDataStore รายการ (I6fd00,b/451491257)

เวอร์ชัน 1.3.0-alpha01

19 พฤศจิกายน 2025

เปิดตัว androidx.datastore:datastore-*:1.3.0-alpha01 แล้ว เวอร์ชัน 1.3.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มการรองรับ KMP Web ใน DataStore โดยใช้ sessionStorage API ฟีเจอร์นี้ช่วยให้ DataStore เก็บข้อมูลไว้ชั่วคราวภายในแท็บเบราว์เซอร์เดียวได้ (I60fad, b/316376114)

เวอร์ชัน 1.2

เวอร์ชัน 1.2.1

11 มีนาคม 2026

androidx.datastore:datastore-*:1.2.1เปิดตัวแล้ว เวอร์ชัน 1.2.1 มีการเปลี่ยนแปลงเหล่านี้

ไม่มีการเปลี่ยนแปลง

  • รุ่นนี้มีการแก้ไขข้อบกพร่องเล็กน้อยเกี่ยวกับโครงสร้างพื้นฐาน และไม่มีการเปลี่ยนแปลง Datastore API หรือลักษณะการทำงานจากเวอร์ชัน 1.2.0

เวอร์ชัน 1.2.0

19 พฤศจิกายน 2025

เปิดตัว androidx.datastore:datastore-*:1.2.0 แล้ว เวอร์ชัน 1.2.0 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่รุ่น 1.1.0

การรองรับ Java/Guava:

  • เพิ่มโมดูล datastore-guava ใหม่เพื่อแสดง API ที่เหมาะกับผู้ใช้ Java และ Guava ListenableFuture ผ่าน GuavaDataStore
  • เพิ่มการรองรับหลายกระบวนการภายใน GuavaDataStore
  • เพิ่มการโอเวอร์โหลดสำหรับ GuavaDataStore.from ที่ยอมรับ Executor ของ Java (แทน CoroutineContext) และใช้ androidx.core.util.Function

การรองรับ Direct Boot:

  • ตอนนี้ระบบรองรับการใช้งาน DataStore ในโหมดการบูตโดยตรงแล้ว API ใหม่ๆ เช่น createInDeviceProtectedStorage() ใน DataStoreFactory และ deviceProtectedDataStore() ใน DataStoreDelegate ช่วยให้สร้าง DataStore ภายในพื้นที่เก็บข้อมูลที่มีการคุ้มครองอุปกรณ์ได้

การเปลี่ยนแปลงพื้นที่เก็บข้อมูลและ API:

  • เพิ่ม PreferencesFileSerializer ที่ใช้ androidx.datastore.core.Serializer เพื่อใช้กับ FileStorage แล้ว
  • กำหนดคอนสตรัคเตอร์เริ่มต้นสำหรับ ReplaceFileCorruptionHandler เพื่อการใช้งานโค้ดทั่วไป

แก้ไขข้อบกพร่อง

  • แก้ไข java.lang.UnsatisfiedLinkError เมื่อใช้ DataStore ในแอปที่เพิ่มประสิทธิภาพด้วย R8 แต่ไม่ได้ใช้ไฟล์ ProGuard มาตรฐาน
  • แก้ไขปัญหาที่การดำเนินการ GuavaDataStore อาจทำงานอย่างไม่ถูกต้องในเทรดการเรียก (เช่น เทรดหลัก) แทนที่จะเป็น Dispatcher ของ IO ที่ระบุ
  • แก้ไขFileNotFoundExceptionปัญหาใน OkioStorage เมื่อเริ่มต้นโดยเพิ่มความพยายามครั้งที่ 2 ในการอ่านข้อมูลในกรณีที่มีภาวะแข่งขัน

เวอร์ชัน 1.2.0-rc01

5 พฤศจิกายน 2025

เปิดตัว androidx.datastore:datastore-*:1.2.0-rc01 แล้ว เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้

เวอร์ชัน 1.2.0-beta01

22 ตุลาคม 2025

เปิดตัว androidx.datastore:datastore-*:1.2.0-beta01 แล้ว เวอร์ชัน 1.2.0-beta01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตั้งค่า CorruptionHandler เป็นสาธารณะ (I9ac35, b/452406457)
  • ใช้ androidx.core.util.Function ใน GuavaDataStore (I71eae, b/448563999)
  • เพิ่มการโอเวอร์โหลดสำหรับ GuavaDataStore.from ที่ใช้ Executor แทน CoroutineContext (I989fa, b/448563183)

แก้ไขข้อบกพร่อง

  • แก้ไข java.lang.UnsatisfiedLinkError เมื่อใช้ DataStore ในแอปที่เพิ่มประสิทธิภาพด้วย R8 แต่ไม่ได้ใช้ getDefaultProguardFile('android-proguard-optimize.txt') (I27d0d, b/434696293)
  • แก้ไขปัญหาที่การดำเนินการ GuavaDataStore อาจทำงานอย่างไม่ถูกต้องในเทรดการเรียก (เช่น เทรดหลัก) แทนที่จะเป็น IO Dispatcher ที่ระบุ (Ic91ea,b/441801112)

เวอร์ชัน 1.2.0-alpha02

7 พฤษภาคม 2025

androidx.datastore:datastore-*:1.2.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 1.2.0-alpha02 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • เพิ่มการรองรับหลายกระบวนการใน GuavaDataStore (e0d608a)
  • เพิ่มเมธอดตัวช่วยเพื่อสร้าง GuavaDataStore จาก DataStore (9af26f4)
  • โปรเจ็กต์ที่เผยแพร่ด้วย Kotlin 2.0 ต้องใช้ KGP 2.0.0 ขึ้นไปจึงจะใช้งานได้ (Idb6b5)
  • แทนที่datastoreโอเวอร์โหลดที่มีอยู่ด้วยวิธีการมอบสิทธิ์เพื่อเริ่มต้น DataStore ที่จะใช้ในระหว่างการบูตโดยตรง (If71b9)

เวอร์ชัน 1.2.0-alpha01

26 มีนาคม 2025

androidx.datastore:datastore-*:1.2.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.2.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่มโมดูล datastore-guava เพื่อแสดง API ที่เหมาะกับผู้ใช้ Java และ Guava ListenableFuture ผ่าน GuavaDataStore (Iadd5e0)
  • ตอนนี้ระบบรองรับการใช้งาน DataStore ในโหมด DirectBoot แล้ว หากต้องการสร้างที่เก็บข้อมูลที่จะใช้ในโหมดการบูตโดยตรง คุณต้องสร้างที่เก็บข้อมูลดังกล่าวภายในที่เก็บข้อมูลที่อุปกรณ์ป้องกัน ซึ่งทำได้โดยใช้ DataStore API ใหม่ต่อไปนี้ createInDeviceProtectedStorage() ใน DataStoreFactory และ deviceProtectedDataStore() ใน DataStoreDelegate (Ib90e56)

การเปลี่ยนแปลง API

  • เพิ่ม PreferencesFileSerializer ที่ใช้ androidx.datastore.core.Serializer อินเทอร์เฟซเพื่อใช้กับ FileStorage (I4c71f3)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหา FileNotFoundException ใน OkioStorage เมื่อเริ่มต้นระบบโดยเพิ่มการพยายามอ่านข้อมูลครั้งที่ 2 ในกรณีที่เกิดภาวะแข่งขัน (I43b3fb, b/337870543)
  • กำหนดคอนสตรัคเตอร์เริ่มต้นสำหรับ ReplaceFileCorruptionHandler เพื่อการใช้งานโค้ดทั่วไป (I795b05, b/358138957)

เวอร์ชัน 1.1

เวอร์ชัน 1.1.7

20 พฤษภาคม 2025

androidx.datastore:datastore-*:1.1.7 เปิดตัวแล้ว เวอร์ชัน 1.1.7 มี คอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับกฎ Proguard ที่ขาดหายไปในอาร์ติแฟกต์ Android ของ datastore-preferences-core (3f3f6e, b/413078297)

เวอร์ชัน 1.1.6

7 พฤษภาคม 2025

เปิดตัว androidx.datastore:datastore-*:1.1.6 แล้ว เวอร์ชัน 1.1.6 มีการเปลี่ยนแปลงเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหาที่ข้อมูลเมตา Gradle เสียหายในเวอร์ชัน 1.1.5 ปัญหานี้เกิดจากข้อบกพร่องใน DSL ของปลั๊กอิน KMP ของ AGP ใหม่ ซึ่งป้องกันไม่ให้ระบบรวมข้อมูลเมตาสำหรับแพลตฟอร์มเป้าหมายทั้งหมดโดยอัตโนมัติ ข้อบกพร่องนี้ทำให้เมธอด DataStore Android บางเมธอดไม่ปรากฏในบิลด์ของไคลเอ็นต์อีกต่อไป การแก้ไขเกี่ยวข้องกับการใช้ DSL android เวอร์ชันเก่าใน build.gradle แทน androidLibrary (7801abf)

เวอร์ชัน 1.1.5

23 เมษายน 2025

androidx.datastore:datastore-*:1.1.5 เปิดตัวแล้ว เวอร์ชัน 1.1.5 มีการเปลี่ยนแปลงเหล่านี้

แก้ไขข้อบกพร่อง

  • เพื่อลดปัญหา CorruptionException ใน PreferencesDataStore ระบบได้เปลี่ยนพื้นที่เก็บข้อมูลเริ่มต้นจาก OkioStorage เป็น FileStorage การเปลี่ยนแปลงนี้เกิดขึ้นจากการเปิดตัวPreferencesFileSerializer b/346197747

เวอร์ชัน 1.1.4

26 มีนาคม 2025

androidx.datastore:datastore-*:1.1.4 เปิดตัวแล้ว เวอร์ชัน 1.1.4 มี คอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แทนที่พื้นที่เก็บข้อมูลเริ่มต้นจาก OkioStorage เป็น FileStorage เพื่อปรับปรุงความน่าเชื่อถือด้วยการลด CorruptionException (I71181, b/346197747)

เวอร์ชัน 1.1.3

26 กุมภาพันธ์ 2025

androidx.datastore:datastore-*:1.1.3 เปิดตัวแล้ว เวอร์ชัน 1.1.3 มี คอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหา FileNotFoundException ใน OkioStorage ที่พบเมื่อเริ่มต้นแอปแล้ว หากการพยายามอ่านไฟล์ครั้งแรกไม่สำเร็จ ระบบจะพยายามอ่านไฟล์ครั้งที่ 2 ในกรณีที่เกิดภาวะแข่งขันเนื่องจากไฟล์ถูกสร้างขึ้นโดยกระบวนการอื่นระหว่างการอ่านครั้งแรก (I43b3f, b/337870543)

เวอร์ชัน 1.1.2

15 มกราคม 2025

androidx.datastore:datastore-*:1.1.2 เปิดตัวแล้ว เวอร์ชัน 1.1.2 มีการเปลี่ยนแปลงเหล่านี้

การแก้ไขข้อบกพร่อง

  • ปรับปรุงเวลาในการตอบสนองของการอ่านแบบวอร์ม (DataStore.data.first()) ได้ 8 เท่า (22b8a40)
  • ReplaceFileCorruptionHandler สามารถสร้างจากโค้ดทั่วไปของ KMP (7632e839)

เวอร์ชัน 1.1.1

1 พฤษภาคม 2024

androidx.datastore:datastore-*:1.1.1เปิดตัวแล้ว เวอร์ชัน 1.1.1 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • ลดสัญญาณเตือนเท็จของ Linux เกี่ยวกับข้อผิดพลาด "Resource deadlock would occur" ในกรณีที่เกิดขึ้นไม่บ่อยนักที่อินสแตนซ์ DataStore หลายรายการพยายามเขียนจากกระบวนการต่างๆ โดยการถอยกลับจากการล็อกไฟล์

เวอร์ชัน 1.1.0

17 เมษายน 2024

androidx.datastore:datastore-*:1.1.0 เปิดตัวแล้ว เวอร์ชัน 1.1.0 มีการเปลี่ยนแปลงเหล่านี้

การเปลี่ยนแปลงที่สำคัญตั้งแต่รุ่น 1.0.0

โปรดอ่านบันทึกประจำรุ่นจากเวอร์ชันอัลฟ่าและรุ่นเบต้าของ 1.1.0 เพื่อดูข้อมูลเพิ่มเติม การอัปเดตหลักบางส่วนใน 1.1.0 มีดังนี้

  • ตอนนี้ DataStore รองรับหลายกระบวนการที่เข้าถึงไฟล์เดียวกัน โดยรองรับการสังเกตการณ์ในกระบวนการต่างๆ
  • อินเทอร์เฟซพื้นที่เก็บข้อมูลใหม่ช่วยให้คุณปรับแต่งวิธีจัดเก็บหรือจัดเรียงโมเดลข้อมูลได้
  • ตอนนี้คุณใช้ DataStore ในโปรเจ็กต์ Kotlin Multiplatform ได้แล้ว

เวอร์ชัน 1.1.0-rc01

3 เมษายน 2024

เปิดตัว androidx.datastore:datastore-*:1.1.0-rc01 แล้ว เวอร์ชัน 1.1.0-rc01 มีการคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไขประสิทธิภาพที่ลดลงซึ่ง updateData ไม่ได้เพิ่มประสิทธิภาพในการเขียนดิสก์หากข้อมูลใหม่เหมือนกับข้อมูลเก่า (d64cfb5)
  • แก้ไขภาวะแข่งขันที่ MultiProcess DataStore อาจพลาดการทำให้เป็นโมฆะระหว่างการเริ่มต้น ((b/326141553),(094c2dd))

เวอร์ชัน 1.1.0-beta02

6 มีนาคม 2024

androidx.datastore:datastore-*:1.1.0-beta02 เปิดตัวแล้ว เวอร์ชัน 1.1.0-beta02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • การปรับปรุงประสิทธิภาพใน DataStore จะรวบรวมเฉพาะการแจ้งเตือนการอัปเดตเมื่อตรวจพบ (b/267792241)
    • โปรดทราบว่าการเปลี่ยนแปลงนี้อาจทําให้เกิด UncompletedCoroutinesError ในการทดสอบหากคุณใช้ไลบรารีการทดสอบ Coroutines โปรดตรวจสอบว่าคุณส่ง TestScope.backgroundScope เมื่อเริ่มต้น DataStore ในการทดสอบเพื่อหลีกเลี่ยงปัญหานี้
  • ​แก้ไขปัญหาการเรียก updateData ที่ซ้อนกันในอินสแตนซ์เดียวกันซึ่งจะทำให้เกิดการหยุดชะงัก (b/241760537)
  • DataStore จะไม่แสดง IOExceptions อีกต่อไปหากลบ SharedPreferences ไม่สำเร็จระหว่างการย้ายข้อมูล (b/195553816)
  • แก้ไขปัญหาที่การเปลี่ยนชื่อไฟล์ล้มเหลวระหว่าง updateData ในสภาพแวดล้อม JVM ที่ไม่ใช่ Android (b/203087070)
  • แก้ไขปัญหาที่ระบบไม่จัดการ CorruptionException หลังจากเริ่มต้น DataStore (b/289582516)

เวอร์ชัน 1.1.0-beta01

10 มกราคม 2024

androidx.datastore:datastore-*:1.1.0-beta01 เปิดตัวโดยไม่มีการเปลี่ยนแปลงใดๆ ตั้งแต่ 1.1.0-alpha07 เวอร์ชัน 1.1.0-beta01 มีคอมมิตเหล่านี้

เวอร์ชัน 1.1.0-alpha07

29 พฤศจิกายน 2023

androidx.datastore:datastore-*:1.1.0-alpha07 เปิดตัวแล้ว เวอร์ชัน 1.1.0-alpha07 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • MultiProcessDataStoreFactory ไม่ใช่ฟีเจอร์ทดลองอีกต่อไป และเราได้นำคำอธิบายประกอบ @ExperimentalMultiProcessDataStore ออกทั้งหมดแล้ว (Ieee54, I8e607)

แก้ไขข้อบกพร่อง

  • เปิดตัวการนำคำอธิบายประกอบ @ExperimentalMultiProcessDataStore ออกในเวอร์ชัน 1.1.0-alpha07 (I8e607)

เวอร์ชัน 1.1.0-alpha06

1 พฤศจิกายน 2023

เปิดตัว androidx.datastore:datastore-*:1.1.0-alpha06 แล้ว เวอร์ชัน 1.1.0-alpha06 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้เมธอดของโรงงาน createSingleProcessCoordinator จะรับเส้นทางไฟล์ (String, java.io.File และ okio.Path) เพื่อให้สอดคล้องกับ createMultiProcessCoordinator (I211c8, b/305755935)

เวอร์ชัน 1.1.0-alpha05

6 กันยายน 2023

androidx.datastore:datastore-*:1.1.0-alpha05 เปิดตัวแล้ว เวอร์ชัน 1.1.0-alpha05 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • ตอนนี้ Datastore FileStorage พร้อมให้บริการแก่สาธารณะแล้ว ดังนั้นไคลเอ็นต์จึงระบุพารามิเตอร์ที่กำหนดเองได้ (Icb985)
  • เปลี่ยนตัวสร้าง OkioStorage ให้ยอมรับ InterProcessCoordinator เพื่อให้ใช้ใน Android กับ MultiProcessCoordinator ได้ (Iecea3)

แก้ไขข้อบกพร่อง

  • แก้ไขปัญหา MultiProcessCoordinator ตรวจสอบไฟล์หลายรายการในไดเรกทอรีเดียวกันไม่ได้
  • แก้ไขปัญหาที่ระบบตรวจหาไฟล์ที่ซ้ำกันไม่ได้หากเส้นทางไฟล์ไม่ได้รับการปรับให้เป็นมาตรฐาน
  • แก้ไขค่าที่ไม่ถูกต้องที่แสดงจาก RxDataStore#isDisposed
  • แก้ไขการกำหนดค่า ProGuard ที่ขาดหายไปสำหรับอาร์ติแฟกต์ datstore-preferences-core

เวอร์ชัน 1.1.0-alpha04

5 เมษายน 2023

androidx.datastore:datastore-*:1.1.0-alpha04เปิดตัวแล้ว เวอร์ชัน 1.1.0-alpha04 มีคอมมิตเหล่านี้

การแก้ไขข้อบกพร่อง

  • ปรับปรุงการติดตั้งใช้งานภายในเพื่อหลีกเลี่ยงภาวะแข่งขันที่โฟลว์ข้อมูลของ DataStore อาจแสดงค่าที่เก่ากว่าหลังจากการอัปเดต

เวอร์ชัน 1.1.0-alpha03

24 มีนาคม 2023

androidx.datastore:datastore-*:1.1.0-alpha03 เปิดตัวแล้ว

การแก้ไขข้อบกพร่อง

  • นำข้อจำกัดของทรัพยากร Dependency ออกจากอาร์ติแฟกต์ Maven เพื่อแก้ปัญหาเกี่ยวกับบิลด์ในเป้าหมาย Kotlin Native (b/274786186, KT-57531)

เวอร์ชัน 1.1.0-alpha02

22 มีนาคม 2023

เปิดตัว androidx.datastore:datastore-*:1.1.0-alpha02 แล้ว เวอร์ชัน 1.1.0-alpha02 มีคอมมิตเหล่านี้

หมายเหตุ

โปรดทราบว่าเวอร์ชันนี้มีการเปลี่ยนโครงสร้างภายในโค้ดที่สำคัญซึ่งผสานการติดตั้งใช้งานสำหรับ DataStore แบบกระบวนการเดียวและการติดตั้งใช้งาน DataStore แบบหลายกระบวนการ โปรดคอยสังเกตการเปลี่ยนแปลงลักษณะการทำงานที่อาจไม่ได้ตั้งใจ (เช่น เวลาของการแจ้งเตือนการอัปเดต) คุณสามารถใช้คอมโพเนนต์ Issue Tracker เพื่อรายงานการเปลี่ยนแปลงดังกล่าว

ฟีเจอร์ใหม่

  • ตอนนี้คุณใช้ DataStore ในโปรเจ็กต์ KMM ได้แล้ว โปรดทราบว่าเป้าหมายที่ไม่ใช่ Android ของ DataStore ยังอยู่ในขั้นทดลอง แต่เราตัดสินใจรวมเวอร์ชันต่างๆ เพื่อให้นักพัฒนาแอปทดลองใช้ได้ง่ายขึ้น
  • ระบบจะย้ายฟีเจอร์แบบหลายกระบวนการจาก androidx.datastore.multiprocess ไปยัง androidx.datastore.core
  • เพิ่มเมธอดแฟกทอรีใหม่ใน androidx.datastore.core.MultiProcessDataStoreFactory เพื่อสร้างอินสแตนซ์ DataStore ด้วยออบเจ็กต์ Storage สำหรับการดำเนินการกับไฟล์
  • เพิ่มอินเทอร์เฟซใหม่ InterProcessCoordinator ที่ช่วยให้อินสแตนซ์ DataStore หลายรายการสื่อสารกันได้ในกระบวนการต่างๆ โปรดทราบว่าการใช้งานแบบหลายกระบวนการของ InterProcessCoordinator ใช้ได้เฉพาะใน Android เท่านั้น

การเปลี่ยนแปลง API

  • เพิ่ม InterProcessCoordinator ไปยัง StorageConnection ในอินเทอร์เฟซ datastore-core (I555bb)
  • เปลี่ยน API ใน datastore-core MultiProcessDataStoreFactory เพื่อใช้ Storage (Iac02f)
  • ย้าย API สาธารณะใน datastore-multiprocess ไปยัง datastore-core (I76d7c)
  • เปิดเผย PreferencesSerializer จาก datastore-preferences-core (I4b788)
  • การเพิ่มคำอธิบายประกอบ @JvmDefaultWithCompatibility (I8f206)

เวอร์ชัน 1.1.0-alpha01

9 พฤศจิกายน 2022

androidx.datastore:datastore-*:1.1.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.1.0-alpha01 มีคอมมิตต่อไปนี้

ฟีเจอร์ใหม่

  • รองรับกรณีการใช้งานแบบหลายกระบวนการซึ่งรับประกันความสอดคล้องของข้อมูลในอินสแตนซ์ DataStore ในกระบวนการต่างๆ เพิ่ม MultiProcessDataStoreFactory#create เพื่อสร้างอินสแตนซ์ DataStore ดังกล่าว
  • อินเทอร์เฟซพื้นที่เก็บข้อมูลใหม่ที่ช่วยให้เปลี่ยนกลไกการจัดเก็บข้อมูลพื้นฐานสำหรับ Datastore ได้ มีการติดตั้งใช้งานสำหรับ java.io และ okio DataStore มีเมธอดใหม่ที่ยอมรับออบเจ็กต์ Storage นี้

การเปลี่ยนแปลง API

  • เปลี่ยน API ใน datastore-core MultiProcessDataStoreFactory เพื่อใช้ Storage (Iac02f)
  • ย้าย API สาธารณะใน datastore-multiprocess ไปยัง datastore-core (I76d7c)
  • แสดง PreferencesSerializer จาก datastore-preferences-core (I4b788)

เวอร์ชัน 1.0.0

เวอร์ชัน 1.0.0

4 สิงหาคม 2021

androidx.datastore:datastore-*:1.0.0 เปิดตัวแล้ว เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้

ฟีเจอร์หลักของเวอร์ชัน 1.0.0

Jetpack DataStore เป็นโซลูชันพื้นที่เก็บข้อมูลที่ช่วยให้คุณจัดเก็บคู่คีย์-ค่าหรือออบเจ็กต์ที่พิมพ์ด้วยบัฟเฟอร์โปรโตคอลได้ DataStore ใช้โครูทีนและ Flow ของ Kotlin เพื่อจัดเก็บข้อมูลแบบไม่พร้อมกัน อย่างสม่ำเสมอ และแบบธุรกรรม

เวอร์ชัน 1.0.0-rc02

21 กรกฎาคม 2021

androidx.datastore:datastore-*:1.0.0-rc02 เปิดตัวแล้ว เวอร์ชัน 1.0.0-rc02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • ชี้แจงว่า SharedPreferencesMigration จะไม่ทำงานหากไม่มีคีย์ (Icfa32, b/192824325)
  • แก้ไขข้อบกพร่องที่ SharedPreferencesMigration ซึ่งสร้างด้วย MIGRATE_ALL_KEYS จะทำให้เกิดข้อยกเว้นหากยังไม่มีคีย์ที่ขอ (Ie318a, b/192824325)

เวอร์ชัน 1.0.0-rc01

30 มิถุนายน 2021

androidx.datastore:datastore-*:1.0.0-rc01เปิดตัวแล้ว เวอร์ชัน 1.0.0-rc01 มีคอมมิตต่อไปนี้

แก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ทำให้มีการเพิ่มไฟล์ .java ลงใน JAR สุดท้ายโดยไม่ตั้งใจ (I65d96, b/188985637)

เวอร์ชัน 1.0.0-beta02

16 มิถุนายน 2021

androidx.datastore:datastore-*:1.0.0-beta02 เปิดตัวแล้ว เวอร์ชัน 1.0.0-beta02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • แก้ไข ClassVerificationFailure (b/187450483)

เวอร์ชัน 1.0.0-beta01

21 เมษายน 2021

androidx.datastore:datastore-*:1.0.0-beta01เปิดตัวแล้ว เวอร์ชัน 1.0.0-beta01 มีคอมมิตเหล่านี้

การเปลี่ยนแปลง API

  • นำ JVM Overload สำหรับเมธอด Kotlin เท่านั้นออก (I2adc7)

การแก้ไขข้อบกพร่อง

  • แก้ไขข้อบกพร่องที่ผู้มอบสิทธิ์ Datastore อาจทำให้เกิดการรั่วไหลของบริบท (Ie96fc, b/184415662)

เวอร์ชัน 1.0.0-alpha08

10 มีนาคม 2021

androidx.datastore:datastore-*:1.0.0-alpha08 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha08 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • ตอนนี้คุณสามารถเพิ่มการย้ายข้อมูลที่ขึ้นอยู่กับบริบทลงในผู้รับมอบสิทธิ์พร็อพเพอร์ตี้ dataStore และ preferencesDataStore ได้แล้ว (I4ef69, b/173726702)
  • เพิ่มฟังก์ชันตัวช่วยเพื่อรับชื่อไฟล์หากคุณไม่ได้ใช้ตัวแทน Datastore หรือ context.createDataStore อีกต่อไป (I60f9a)
  • ตอนนี้ Serializer writeTo และ readFrom ถูกระงับแล้ว หากใช้ Serializer คุณจะต้องอัปเดตฟังก์ชันให้เป็นฟังก์ชันระงับ (I1e58e)
  • เพิ่มผู้รับมอบสิทธิ์พร็อพเพอร์ตี้สำหรับผู้ใช้ RxDataStore (Ied768, b/173726702)

การแก้ไขข้อบกพร่อง

  • บังคับใช้ข้อจำกัดในการใช้งาน API เวอร์ชันทดลองแบบสาธารณะ (I6aa29, b/174531520)

เวอร์ชัน 1.0.0-alpha07

24 กุมภาพันธ์ 2021

androidx.datastore:datastore-*:1.0.0-alpha07 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha07 มีคอมมิตต่อไปนี้

การเปลี่ยนแปลง API

  • เราได้นำฟังก์ชันส่วนขยาย Context.createDataStore ออกแล้ว และแทนที่ด้วยตัวแทนพร็อพเพอร์ตี้ globalDataStore เรียกใช้ globalDataStore เพียงครั้งเดียวที่ระดับบนสุดในไฟล์ Kotlin เช่น

    val Context.myDataStore by dataStore(...)
    

    วางไว้ที่ระดับบนสุดของไฟล์ Kotlin เพื่อให้มีอินสแตนซ์เดียวเท่านั้น (I57215, b/173726702)

  • ตอนนี้ฟังก์ชัน RxDataStore อยู่ในคลาส RxDataStore แทนที่จะเป็นฟังก์ชันส่วนขยายใน DataStore (Idccdb, b/177691248)

  • หากต้องการย้ายข้อมูล EncryptedSharedPreferences (หรือ SharedPreferences สำหรับการเปิดเครื่องโดยตรง) ไปยัง DataStore ตอนนี้คุณสามารถทำได้ด้วย SharedPreferencesMigration Constructor ใหม่ที่ช่วยให้คุณแทรก SharedPreferences ได้ (I8e04e, b/177278510)

แก้ไขข้อบกพร่อง

  • ตอนนี้ Datastore จะแสดงข้อยกเว้นหากมี Datastore ที่ใช้งานอยู่หลายรายการสำหรับไฟล์เดียวกัน หากคุณไม่ได้จัดการ DataStore เป็น Singleton หรือไม่ได้ตรวจสอบว่าไม่มีอินสแตนซ์ DataStore 2 รายการที่ทำงานพร้อมกันสำหรับไฟล์หนึ่งๆ คุณอาจเห็นข้อยกเว้นเมื่ออ่านหรือเขียนลงใน DataStore คุณแก้ไขปัญหานี้ได้โดยการจัดการ DataStore เป็น Singleton (Ib43f4, b/177691248)
  • แก้ไขลักษณะการทำงานของการยกเลิกเมื่อมีการยกเลิกขอบเขตผู้โทร (I2c7b3)

เวอร์ชัน 1.0.0-alpha06

13 มกราคม 2021

androidx.datastore:datastore-*:1.0.0-alpha06 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • เพิ่ม Wrapper RxJava สำหรับ DataStore อาร์ติแฟกต์ datastore-rxjava2/3 มี Wrapper สำหรับ Datastore API หลัก (RxDataStore, RxDataStoreBuilder และ RxDataMigration) อาร์ติแฟกต์ datastore-preferences-rxjava2/3 มีเครื่องมือสร้างเพื่อสร้าง Datastore ค่ากำหนด

การเปลี่ยนแปลง API

  • ซ่อนอินเทอร์เฟซ CorruptionHandler ไม่มีเหตุผลที่ต้องเป็นแบบสาธารณะเนื่องจากโรงงาน DataStore ยอมรับเฉพาะ ReplaceFileCorruptionHandler เท่านั้น (I0b3b3, b/176032264)
  • เราได้นำเมธอด preferencesKey<T>(name: String): Key<T> ออกและแทนที่ด้วยเมธอดที่เฉพาะเจาะจงสำหรับแต่ละประเภทที่รองรับแล้ว เช่น ตอนนี้ preferencesKey<Int>("int") คือ intPreferencesKey("int") (Ibcfac, b/170311106)

แก้ไขข้อบกพร่อง

  • แก้ไขเอกสารประกอบเกี่ยวกับ DataStoreFactory ซึ่งไม่ได้ระบุว่าระบบจะสร้างไฟล์ Datastore ในไดเรกทอรีย่อย "datastore/" (Ica222)

เวอร์ชัน 1.0.0-alpha05

2 ธันวาคม 2020

androidx.datastore:datastore-*:1.0.0-alpha05 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha05 มีคอมมิตต่อไปนี้

แก้ไขข้อบกพร่อง

  • เพิ่มเอกสารประกอบและข้อยกเว้นที่ดีขึ้นเกี่ยวกับการเขียนพร้อมกันจาก Datastore (Ia98a2, b/173522155, b/173726702)
  • ตอนนี้เราอนุญาต (แต่ไม่บังคับ) ให้ปิด OutputStream ที่ส่งไปยัง Serializer.writeTo() ได้แล้ว (I5c9bf, b/173037611)

เวอร์ชัน 1.0.0-alpha04

พฤศจิกายน 17, 2020

androidx.datastore:datastore-*:1.0.0-alpha04เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha04 มีคอมมิตต่อไปนี้

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหาเกี่ยวกับแพ็กเกจที่ทำให้เกิดข้อขัดข้องต่อไปนี้ใน Preference Datastore 1.0.0-alpha03: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/datastore/preferences
    • มีการรายงานข้อขัดข้องครั้งนี้ครั้งแรกที่ b/173036843
    • (I4712d, b/173036843)

เวอร์ชัน 1.0.0-alpha03

11 พฤศจิกายน 2020

androidx.datastore:datastore-*:1.0.0-alpha03 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

  • ตอนนี้ค่ากำหนดรองรับค่าแบบ Double (ซึ่งมีประโยชน์หากคุณต้องการความแม่นยำมากกว่าค่าแบบ Float) (I5be8f, b/169471808)

การเปลี่ยนแปลง API

  • สร้างการอ้างอิง Kotlin ล้วนสำหรับ DataStore เพื่อให้คอมไพล์ได้เร็วขึ้น androidx.datastore:datastore-core มีเฉพาะ API หลักของ Kotlin และ androidx.datastore:datastore มี API ที่ขึ้นอยู่กับ Android (รวมถึง SharedPreferencesMigration และตัวสร้าง Context.createDataStore)(I42d75, b/168512698)
  • แยกเป้าหมายสำหรับที่เก็บข้อมูลค่ากำหนดเพื่อการคอมไพล์ Kotlin ที่เร็วขึ้น (Ia3c19)
  • ตอนนี้ Serializer ต้องมีพร็อพเพอร์ตี้ใหม่สำหรับค่าเริ่มต้นที่จะใช้หากไม่มีข้อมูลในดิสก์ ซึ่งจะช่วยให้ติดตั้งใช้งานตัวจัดรูปแบบข้อมูลที่กำหนดเองได้ง่ายขึ้น เพื่อให้ผู้ใช้ไม่ต้องจัดการสตรีมอินพุตที่ว่างเปล่าเป็นกรณีพิเศษ (สตรีมอินพุตที่ว่างเปล่าจะแยกวิเคราะห์ด้วย JSON ไม่ได้)

    • นอกจากนี้ ตอนนี้ยังมีการตรวจสอบเพื่อยืนยันว่าสตรีมเอาต์พุตที่ส่งไปยัง writeTo() ไม่ได้ปิดอยู่ และหากปิดอยู่ ระบบจะแสดงข้อยกเว้น (I16e29)
  • ทำให้ตัวสร้างสำหรับ SharedPreferencesView เป็นแบบภายใน เดิมทีเราตั้งค่าเป็นสาธารณะเพื่อให้ทดสอบได้ แต่การทดสอบควรสร้าง SharedPreferencesMigration และทดสอบกับ SharedPreferencesMigration แทน (I93891)

การแก้ไขข้อบกพร่อง

  • ตอนนี้พารามิเตอร์ produceFile ใน DataStoreFactory และ PreferenceDataStoreFactory เป็นพารามิเตอร์สุดท้ายในรายการแล้ว จึงช่วยให้คุณใช้ไวยากรณ์ของ Kotlin Trailing Lambda ได้ (Ibe7f1, b/169425442)
  • ตามข้อกำหนดใหม่ของ API ที่ชัดเจนสำหรับ Kotlin (I5ae1e)

ปัญหาที่ทราบ

  • Preference Datastore ขัดข้องเมื่อใช้ java.lang.NoClassDefFoundError (b/173036843)

เวอร์ชัน 1.0.0-alpha02

14 ตุลาคม 2020

androidx.datastore:datastore-core:1.0.0-alpha02 และ androidx.datastore:datastore-preferences:1.0.0-alpha02 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้

แก้ไขข้อบกพร่อง

  • เพิ่มการป้องกันการเปลี่ยนแปลงใน datastore-core การเปลี่ยนแปลงทำให้การใช้ Datastore สำหรับผู้ที่ใช้ Datastore กับประเภทที่ไม่ใช่ Proto/ไม่ใช่ค่ากำหนดใช้งานไม่ได้ (I6aa84)
  • เพิ่มเมธอด toString ลงใน Preferences.kt เพื่อให้แก้ไขข้อบกพร่องของสถานะปัจจุบันได้ง่าย (I96006)
  • เพิ่มข้อยกเว้นเพื่อป้องกันการใช้ DataStore.Preferences ในทางที่ผิด (I1134d)
  • แก้ไขข้อบกพร่องที่ทำให้แอปขัดข้องเมื่อเริ่มต้น (I69237, b/168580258)

เวอร์ชัน 1.0.0-alpha01

2 กันยายน 2020

androidx.datastore:datastore-core:1.0.0-alpha01 และ androidx.datastore:datastore-preferences:1.0.0-alpha01 เปิดตัวแล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้

ฟีเจอร์ใหม่

Jetpack DataStore เป็นโซลูชันการจัดเก็บข้อมูลใหม่ที่ได้รับการปรับปรุงซึ่งมีเป้าหมายเพื่อแทนที่ SharedPreferences DataStore สร้างขึ้นจากโครูทีนและ Flow ของ Kotlin โดยมี 2 การติดตั้งใช้งานที่แตกต่างกัน ดังนี้

  • Proto DataStore ซึ่งช่วยให้คุณจัดเก็บออบเจ็กต์ที่พิมพ์ได้ (สนับสนุนโดยบัฟเฟอร์โปรโตคอล)
  • Preferences DataStore ซึ่งจัดเก็บคู่คีย์-ค่า

ข้อมูลจะได้รับการจัดเก็บแบบไม่พร้อมกัน สอดคล้องกัน และเป็นธุรกรรม ซึ่งช่วยแก้ปัญหาข้อเสียส่วนใหญ่ของ SharedPreferences