架構元件版本資訊封存內容

2019 年 1 月 15 日

WorkManager

WorkManager 1.0.0-beta02 發布。這個版本修正了一些錯誤。

修正錯誤

  • 修正了週期性工作在搭載 Android 6.0 (API 級別 23) 的裝置上,可能會於每次間隔執行超過一次的極端案件。b/121998363
  • 修正了搭載 Android 5.1 (API 級別 22) 以下版本的裝置上發生的 ConcurrentModificationExceptionb/121345393
  • 針對搭載 Android 5.1 (API 級別 22) 以下版本的裝置修正了未符合限制條件時的工作執行錯誤。b/122578012
  • 最佳化工作完成處理方式,加快某些極端案件中的處理速度。b/122358129
  • 新增了一項變更,解決 WorkManager 使用的多個 LiveData 例項間可能存在的競爭狀況。
  • 改用 Room 依附元件 1.1.1,而非 1.1.1-rc01;這些版本完全相同。b/122578011

2018 年 12 月 19 日

WorkManager

WorkManager 1.0.0-beta01 發布。這個版本沒有任何 API 變更;往後,除非出現重大問題,否則 WorkManager 的 API 將保持穩定,直到推出下一個版本。這個版本修正了一些錯誤。

修正錯誤

  • 先前遭取消的子項於父項工作成功完成後不會再執行。b/120811767
  • 適當地初始化記錄類別 (主要顯示於測試期間)。

2018 年 12 月 18 日

Navigation 1.0.0-alpha09 發布。這個版本包含破壞性的 API 變更;請參閱下方的「破壞性變更」一節。

我們決定不繼續開發 android.arch.navigation:navigation-testing 構件。雖然經證明這對 NavController 的內部測試有幫助,但我們強烈建議採用其他測試策略 (例如模擬 NavController 執行個體),以驗證目前進行的 navigate() 呼叫正確無誤。2018 年 Android 開發人員高峰會的單次活動講座 詳細討論了這種做法,而我們也會專門針對 Navigation 測試提供更多說明文件。

新功能

  • NavigationUI 搭配使用時,含有 menuCategory="secondary"MenuItem 不會再彈出返回堆疊。b/120104424
  • AppBarConfiguration 現在可讓您設定備用的 OnNavigateUpListener 執行個體,於 navController.navigateUp() 傳回 false 時進行呼叫。b/79993862 b/120690961

破壞性變更

  • <argument>argType="reference" 搭配使用時,Navigation 不會再剖析參照,改為提供原始資源 ID 本身。b/111736515
  • 根據預設,onNavDestinationSelected() 現在會彈回導覽圖的起始目的地,與 setup 方法維持一致。為 MenuItem 新增 menuCategory="secondary",以免彈出返回堆疊。aosp/852869
  • 產生的 Args 類別的 fromBundle() 方法現在接受非空值的 Bundle,而非可為空值的 Bundleaosp/845616

修正錯誤

  • 引數現在可從深層連結正確剖析為正確的 argType,而非一律剖析為字串。b/110273284
  • Navigation 現在可正確匯出公開資源。b/121059552
  • Safe Args 現在支援 Android Gradle 外掛程式 3.4 Canary 4 以上版本 b/119662045

2018 年 12 月 12 日

WorkManager

WorkManager 1.0.0-alpha13 發布。這個版本包含小幅 API 變更,對部分 Kotlin 使用者有所助益。

API 變更

  • androidx.work.Result 已移動成為 ListenableWorker 的內部類別。這可防止重構程序與 Kotlin 的頂層 Result 類別發生衝突。「這是一項破壞性的 API 變更。」b/120564418

破壞性 API 變更

  • androidx.work.Result 已移動成為 ListenableWorker 的內部類別。

2018 年 12 月 6 日

Paging

Paging 2.1.0-rc01 發布,且自 2.1.0-beta01 版以來皆無異動。

Navigation 1.0.0-alpha08 發布。這個版本包含破壞性的 API 變更;請參閱下方的「破壞性變更」一節。

新功能

  • 目的地標籤現在搭配 NavigationUI 方法使用時,將自動使用正確的引數取代 android:label 中的 {argName} 執行個體 b/80267266
  • Navigation 現在依附於支援資料庫 28.0.0。b/120293333

破壞性變更

  • OnNavigatedListener 已重新命名為 OnDestinationChangedListenerb/118670572
  • OnDestinationChangedListener 現在也會傳遞引數的 Bundleaosp/837142
  • 移除了 app:clearTaskapp:launchDocument 屬性及其相關方法。您可以將 app:popUpTo 與圖形根層級搭配使用,來移除返回堆疊中的所有目的地。b/119628354
  • ActivityNavigator.Extras 現在採用 Builder 模式,並加入可設定任何 Intent.FLAG_ACTIVITY_ 標記的功能。aosp/828140
  • NavController.onHandleDeepLink 已重新命名為 handleDeepLinkaosp/836063
  • 許多不適用於設定子類別的類別和方法 (例如 NavOptionsNavInflaterNavDeepLinkBuilderAppBarConfiguration) 皆已設為 finalaosp/835681
  • 移除已淘汰的 NavHostFragment.setGraph() 方法。aosp/835684
  • 移除已淘汰的 NavigationUI.navigateUp(DrawerLayout, NavController) 方法。aosp/835684
  • Fragment 建立程序已移至 FragmentNavigator,以便將 Fragment 建立程序委派給 FragmentFactoryb/119054429
  • NavGraphNavigator 的建構函式不再接受 Contextaosp/835340
  • NavigatorProvider 現已成為類別,不再是介面。getNavigatorProvider() 傳回的 NavigatorProvider 並未改變其功能。aosp/830660
  • 已移除 NavDestination.navigate()。請改為透過 Navigator 呼叫 navigate()aosp/830663
  • 大幅重構 Navigator,不再需要使用 OnNavigatorNavigatedListener,而是改為讓 navigate 傳回原本的導覽目的地 NavDestination
  • Navigator 執行個體無法再將彈出事件傳送至 NavController。建議您使用 OnBackPressedCallback 來攔截返回按鈕點按動作,並呼叫 navController.popBackStack()aosp/833716

修正錯誤

  • 當目的地為 <navigation> 元素時,popUpTo 現在會穩定運作。b/116831650
  • 修正因使用巢狀結構圖時發生 IllegalArgumentException 而導致的數個問題。 b/118713731 b/113611083 b/113346925 b/113305559
  • <activity> 目的地的 dataPattern 屬性現在可為引數填入非 String 引數,方法是呼叫 toString()b/120161365

Safe Args

  • Secure Args 支援可序列化物件,包括 Enum 值。Enum 類型可以使用列舉常值來設定預設值,無須使用類別名稱 (例如 app:defaultValue="READ")。b/111316353
  • 只要是 Safe Args 支援的類型,Safe Args 皆支援其陣列 b/111487504
  • Safe Args 現在會忽略資源目錄的子資料夾 b/117893516
  • Safe Args 會視情況新增 @Override 註解 b/117145301

2018 年 12 月 5 日

WorkManager

WorkManager 1.0.0-alpha12 發布。這個版本包含幾項破壞性的 API 變更;請參閱下方的「破壞性 API 變更」一節。這個版可能會成為我們發布的第一個 Beta 版。alpha12 也包含大量的說明文件更新。

API 變更

  • 新構件 work-rxjava2 導入了 RxWorker。這是一個等待接收 Single<Payload>ListenableWorker
  • 移除了對 Firebase JobDispatcher 的支援,原因是該程式庫即將遭到淘汰。換句話說,隨著我們邁入 Beta 版,work-firebase 構件將不再更新。我們日後會考慮增設替代選項。
  • Payload 合併至 ResultResult 現在是「密封類別」,內含三種具體實作,可透過 Result.success() (或Result.success(Data))、Result.failure() (或Result.failure(Data)) 和 Result.retry() 取得。您的 ListenableFuture 現在會產生 Result,而非 PayloadWorker 沒有輸出 Data 的 getter 和 setter 方法。這是一項破壞性變更。
  • 新增了 Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) 以及相應變體,為觸發速度較慢的內容 URI 提供更完善的支援。b/119919774
  • 新增了 WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) 變體。這個方法必須使用 API 26。
  • 新增了 Operation.await()ListenableFuture.await() Kotlin 擴充功能方法。
  • Operation.getException() 已重新命名為 Operation.getThrowable()。這是一項破壞性變更。
  • ContentUriTriggers 類別和其參照方法不再提供公共使用。這是一項破壞性變更。
  • 移除了 WorkManagerWorkContinuationOneTimeWorkRequest 中的其餘變數引數方法,以簡化 API。如要修正任何版本問題,可以使用 Arrays.asList(...) 包裝現有的變數引數。我們仍會納入每種方法的單一引數版本。這是一項破壞性變更。
  • 移除 WorkContinuation.combine(OneTimeWorkRequest, *) 變數。這些變體提供的 API 較為複雜難懂;現有的 combine 方法比較容易理解。這是一項破壞性變更。

修正錯誤

  • Marchmallow 之前的實作版本現在能夠更穩定地從現行工作程序終止的狀況中恢復。
  • 透過 observeForever 觀測到的 LiveData 可使用 WorkManager 追蹤。這是將 Room 程式庫修正項目向後移植。b/74477406
  • 如果序列化物件超出大小上限,Data.Builder.build() 現在會擲回例外狀況。過去,這只會發生在背景執行緒,因此您無法做出適當處理。
  • 進一步區分已停止與已取消的工作;getWorkInfoById()ListenableWorker.onStopped() 期間會傳回具備 CANCELLED StateWorkInfo
  • ListenableWorker 中將 null Result 視作失敗。b/120362353
  • 對搭載 API 24 且不時擲回 IllegalArgumentException 的 Shield Tablets 做出推測性修正。b/119484416

破壞性 API 變更

  • 移除了對 Firebase JobDispatcher 的支援,原因是該程式庫即將遭到淘汰。換句話說,隨著我們邁入 Beta 版,work-firebase 構件將不再更新。我們日後會考慮增設替代選項。
  • Payload 合併至 ResultResult 現在是「密封類別」,內含三種具體實作,可透過 Result.success() (或Result.success(Data))、Result.failure() (或Result.failure(Data)) 和 Result.retry() 取得。您的 ListenableFuture 現在會產生 Result,而非 PayloadWorker 沒有輸出 Data 的 getter 和 setter 方法。
  • 新增了 Operation.await()ListenableFuture.await() Kotlin 擴充功能方法。
  • Operation.getException() 已重新命名為 Operation.getThrowable()
  • ContentUriTriggers 類別和其參照方法不再提供公共使用。
  • 移除了 WorkManagerWorkContinuationOneTimeWorkRequest 中的其餘變數引數方法,以簡化 API。如要修正任何版本問題,可以使用 Arrays.asList(...) 包裝現有的變數引數。我們仍會納入每種方法的單一引數版本。
  • 移除了 WorkContinuation.combine(OneTimeWorkRequest, *) 變體。這些變體提供的 API 較為複雜難懂;現有的 combine 方法比較容易理解。

2018 年 12 月 4 日

Room

Room 2.1.0-alpha03 發布,提供協同程式支援並修正多項錯誤。

API 變更

  • @Fts3/@Fts4 中的 FTS tokenizer 現在接受 String,而非 Enum。這樣一來,Room 就能使用自訂權杖化工具。內建權杖化工具仍會透過 FtsOptions 以字串常數定義。b/119234881

新功能

  • 協同程式:DAO 方法現在可以是暫停函式。為了支援 Room 的暫停函式,我們推出了新構件 room-coroutinesb/69474692
  • 加上 @Insert@Delete@Update 註解的 DAO 方法現在支援 ListenableFuture 做為傳回類型。b/119418331

修正錯誤

  • 修正錯誤:Room 會在 @EntityignoredColumns 屬性中嘗試尋找含有資料欄的建構函式。b/119830714
  • 修正錯誤:Room 先前在所產生的實作項目中不會將 DAO 方法參數標示為最終參數,現在這個錯誤已經修正。b/118015483
  • 修正錯誤:Room 處理工具先前針對含有特殊符號的查詢回報錯誤時會當機,現在這個錯誤已經修正。b/119520136
  • 修正了 Room 會拒絕使用其他各種 Collection 實作項目做為 IN 運算式引數的錯誤。b/119884035
  • 修正了 Room 傳回的 LiveData 在有觀測活動時會遭到垃圾收集處理而再也無法發出新資料的錯誤。b/74477406
  • 更新了 RoomDatabase 的鎖定機制,以減少鎖定動作爭用情形。b/117900450

2018 年 11 月 8 日

WorkManager

WorkManager 1.0.0-alpha11 發布。這個版本包含的多項變更將在 beta 成為穩定的 API。 這個版本中有破壞性的 API 變更;請參閱下方的「破壞性 API 變更」一節。

API 變更

  • work-runtime-ktx 推出新的 CoroutineWorker
  • WorkStatus 已重新命名為 WorkInfo。所有相應的 getStatus 方法變體也已重新命名為對應的 getWorkInfo 變體。這是一項破壞性變更。
  • ListenableWorker.onStopped() 不再接受用來指出 WorkRequest 是否已取消的布林引數。這項資訊在 WorkManager 中已無區別。這是一項破壞性變更。
  • androidx.work.test 套件已重新命名為 androidx.work.testing 套件。這是一項破壞性變更。
  • Constraints 的 setter 不再是公用 API 的一部分。這是一項破壞性變更。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 先前會傳回陣列,現在則會傳回集合。這是一項破壞性變更。
  • ListenableWorker.onStartWork() 已重新命名為 ListenableWorker.startWork()。這是一項破壞性變更。
  • WorkStatus 的建構函式不再是公用 API 的一部分。這是一項破壞性變更。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 已分別重新命名為 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()。這是一項破壞性變更。
  • 在公用 API 中新增了大量 @NonNull 註解,讓 API 更貼近需求。
  • 新增 WorkManager.enqueueUniqueWork() API,這樣不必建立 WorkContinuation,就能將不重複的 OneTimeWorkRequest 加入佇列。
  • WorkManager 中,enqueuecancel 方法的所有變體現在會傳回新的 Operation 類型。這是一項破壞性變更。
  • enqueue 的所有變體皆不再接受 WorkRequest 的變數引數。這是一項破壞性變更。請改用 Collections。您可以使用 Arrays.asList() 修改現有程式碼。這項變更是為了減少 API 介面和方法的計數。
  • 現在如果在每個程序中嘗試 initialize WorkManager 超過一次,就會產生 IllegalStateException。這是一項破壞性變更。

修正錯誤

  • work-runtime-ktx 構件中的 WorkRequest.Builder 現在會使用 ListenableWorker。修正 b/117666259
  • 確保 PeriodicWork 的下次執行時間設在未來。修正 b/118204399
  • 移除在應用程式啟動時使用 WorkManager 而可能導致的磁碟 I/O。修正 b/117796731
  • 修正 WorkConstraintsTracker 中的競爭狀況。修正 android-workmanager/issues/56

破壞性 API 變更

  • WorkStatus 已重新命名為 WorkInfo。所有相應的 getStatus 方法變體也已重新命名為對應的 getWorkInfo 變體。
  • ListenableWorker.onStopped() 不再接受用來指出 WorkRequest 是否已取消的布林引數。這項資訊在 WorkManager 中已無區別。
  • androidx.work.test 套件已重新命名為 androidx.work.testing 套件。
  • Constraints 的 setter 不再是公用 API 的一部分。
  • WorkerParameters.getTriggeredContentUris()WorkerParameters.getTriggeredContentAuthorities() 先前會傳回陣列,現在則會傳回集合。
  • ListenableWorker.onStartWork() 已重新命名為 ListenableWorker.startWork()
  • WorkStatus 的建構函式不再是公用 API 的一部分。
  • Configuration.getMaxJobSchedulerID()Configuration.getMinJobSchedulerID() 已分別重新命名為 Configuration.getMinJobSchedulerId()Configuration.getMaxJobSchedulerId()
  • WorkManager 中,enqueuecancel 方法的所有變體現在會傳回新的 Operation 類型。
  • enqueue 的所有變體皆不再接受 WorkRequest 的變數引數。
  • 現在如果在每個程序中嘗試 initialize WorkManager 超過一次,就會產生 IllegalStateException

2018 年 11 月 1 日

Paging

Paging 2.1.0-beta01 發布,且自 2.1.0-alpha01 版以來皆無異動。

2018 年 10 月 30 日

Room

Room 2.1.0-alpha02 發布,修正多項錯誤並推出一項新功能。

新功能

  • 開始支援在 @Relation 中參照 @DatabaseViewb/117680932

修正錯誤

  • 修正了從 Rx 傳回類型進行訂閱與棄置時,Room 會在主執行緒中執行磁碟 I/O 的錯誤。b/117201279
  • 修正了 Room 無法為 Kotlin 實體類別中的欄位找到適當類型轉換工具的錯誤。b/111404868
  • 修正了當 DAO 介面實作包含的 Kotlin 預設方法沒有引數時,Room 會產生錯誤程式碼的問題。b/117527454
  • 更新了 Room 的 SQLite 文法剖析器,修正導致建構時間過長的效能問題。b/117401230

2018 年 10 月 29 日

Navigation 1.0.0-alpha07 發布,修正多項錯誤並推出 API 變更。

新功能

破壞性變更

  • navigation-testing-ktx 模組已收入 navigation-testing artifact,因此無法再發布。
  • navigation-testing 構件現在依附於 Kotlin 標準程式庫。API 經變更後更符合 Kotlin 使用慣例,但您可以繼續使用該 API 執行以 Java 編寫的測試。
  • 不再支援中繼資料資訊清單註冊導覽圖。b/118355937
  • 無法再將動作附加至 <activity> 目的地。aosp/785539

修正錯誤

  • 深層連結現在可正確地剖析查詢參數。b/110057514
  • Activity 目的地現在可正確地套用所有進入與退出的動畫。b/117145284
  • 修正了使用自訂 Navigator 時因設定變更而發生的異常終止問題。b/110763345

Safe Args

  • Safe Args 現在可以固定依附於 Android Gradle 外掛程式 3.2.1。b/113167627
  • 現在可以為內部類別產生 Directions。b/117407555
  • 修正了無法順利產生 Directions 並加到 <include> 導覽圖的問題。b/116542123

2018 年 10 月 12 日

Paging

Paging 2.1.0-alpha01 發布,內含兩大新增項目,分別為網頁捨棄功能以及每個構件的 KTX 擴充功能程式庫,另外還有幾項 API 變更和錯誤修正項目。

API 變更

  • 新增了 PagedList.Config.Builder.setMaxSize(),用於限制記憶體中的已載入項目數量。
  • 新增了 androidx.paging.Config(),做為 PagedList.Config.Builder 的 Kotlin 替代方案。
  • 新增了 androidx.paging.PagedList(),做為 PagedList.Builder 的 Kotlin 替代方案。
  • 新增了 DataSourceFactory.toLiveData(),做為 LivePagedListBuilder 的 Kotlin 替代方案。
  • 新增了 DataSourceFactory.toObservable()toFlowable(),做為 RxPagedListBuilder 的 Kotlin 替代方案。
  • 新增了 AsyncPagedListDiffer.addPagedListListener(),用於監聽 PagedList 遭到更換的情況。b/111698609
  • 新增了可傳遞新舊清單的 PagedListAdapter.onCurrentListChanged() 變體,淘汰了先前的變體。
  • 新增了 PagedListAdapter/AsyncPagedListDiffer.submitList() 變體,該變體可接受另一個在差異比較完成後,因顯示 PagedList 而觸發的回呼。這樣一來,您就可以將 PagedList 更換活動與其他 UI 更新項目同步處理。b/73781068
  • 新增了 PagedList.getLoadedCount(),用於指出記憶體中的項目數量。請注意,如果停用了預留位置,傳回的值一律會等於 .size()

修正錯誤

  • 修正了當清單重複使用時,差異比較作業中發生的競爭狀況。b/111591017
  • 現在如果索引無效,PagedList.loadAround() 會擲回 IndexOutOfBoundsException。先前,這可能會異常終止並擲回其他不明確的例外狀況。
  • 修正問題:在初始載入大小極小且資料不變的情況下,系統無法進一步載入 b/113122599

2018 年 10 月 11 日

WorkManager

WorkManager 1.0.0-alpha10 發布,支援由開發人員控制的非同步工作。這個版本中有破壞性的 API 變更;請參閱下方的「破壞性 API 變更」一節。

我們預期 WorkManager 將進入 Alpha 測試期的最後階段,並在 Beta 版中達到 API 穩定狀態,因此請抽空透過我們的 Issue Tracker 提供意見回饋。

API 變更

  • 移除先前所有 deprecated 方法和類別,特別是預設的 Worker 建構函式。這是一項破壞性的 API 變更。
  • NonBlockingWorker 重新命名為 ListenableWorker,現為未隱藏的公開類別並已開放使用。
    • ListenableWorker 可讓您存取一種抽象的方法 ListenableFuture<Payload> onStartWork(),只要透過主執行緒呼叫即可。您可以選擇採非同步形式啟動與處理工作。完成後,請視情況更新 ListenableFuturealpha02 中的 Futures 套件會提供 ListenableFuture 的參考實作 (請見下方的 WorkManager 部分)。
    • Worker 採用抽象的 Result doWork() 方法,可擴充 ListenableWorker 並如往常一樣運作。
    • 將部分方法和成員從 Worker 重組至 ListenableWorker
    • 針對使用 Kotlin 協同程式 (在穩定版發布後) 和 RxJava2 的 ListenableWorker,我們會盡快提供參考實作。
  • WorkerFactory 介面和 DefaultWorkerFactory 具體實作已併入抽象類別 WorkerFactory。這項實作可確保在其他做法皆無效時,為使用者建立的 WorkerFactory 例項呼叫預設的反射性行為。這是一項破壞性變更。
  • 移除了 WorkManager.synchronous() 和 WorkContinuation.synchronous(),以及所有相關方法。新增了 ListenableFuture<Void>,做為 API 中多種方法的傳回類型。「這是一項破壞性的 API 變更。」
    • 您現在可以使用 ListenableFuture 同步進行擷取與觀測。比方說,WorkManager.enqueue() 原本會傳回 void,現在則會傳回 ListenableFuture<Void>。作業完成後,您可以呼叫 ListenableFuture.addListener(Runnable, Executor)ListenableFuture.get() 來執行程式碼。
    • 請注意,這些 ListenableFuture 不會指出作業成功或失敗,只會指出作業已完成。您還是需要連結 WorkManager 方法,才能掌握這項資訊。
    • 我們會忽略對這些物件的 cancel() 呼叫,原因是這些呼叫容易造成混淆又難以理解 (要取消的是作業還是所產生的工作?)。這屬於 Future 合約範圍內。
    • 為了與同步的 getStatus* 方法維持一致性,我們提供了 ListenableFuture 變體並對傳回 LiveData 的現有變體進行了重新命名,在名稱中明確加上「LiveData」(例如 getStatusesByIdLiveData(UUID))。「這是一項破壞性的 API 變更。」

修正錯誤

  • 修正了 alpha09 中已知的 androidx-annotations.pro 檔案重複問題。如要移除先前版本資訊中提供的解決方法,可以從 Gradle 檔案中刪除 exclude 'META-INF/proguard/androidx-annotations.pro'
  • 新增了 ProGuard 設定,以保留新的 Worker 建構函式。b/116296569
  • 修正競爭狀況在工作經過 REPLACE 處理後可能發生的 NullPointerExceptionb/116253486b/116677275
  • WorkContinuation.combine() 現在接受一個以上 (而非兩個以上) 的 WorkContinuationb/117266752

破壞性 API 變更

  • 移除先前所有 deprecated 方法和類別,特別是預設的 Worker 建構函式。
  • WorkerFactory 介面和 DefaultWorkerFactory 具體實作已併入抽象類別 WorkerFactory
  • 移除了 WorkManager.synchronous()WorkContinuation.synchronous()
  • WorkManager.getStatus*() 方法現在會傳回 ListenableFutureWorkManager.getStatus*LiveData() 則會傳回 LiveData

Futures

Futures 1.0.0-alpha02 發布。

API 變更

  • 開發人員現在可以使用 ResolvableFutureAbstractResolvableFuture,做為 ListenableFuture 的輕量具體實作。

2018 年 10 月 8 日

Room

Room 2.1.0-alpha01 發布。

新功能

  • FTS:Room 現在支援具備 FTS3 或 FTS4 對應資料表的實體。使用 @Entity 註解的類別現在可以另外加上 @Fts3@Fts4 註解,以宣告含有對應全文搜尋資料表的類別。您可以透過註解的方法存取 FTS 的進階自訂選項。b/62356416
  • 檢視畫面:Room 現在支援使用 @DatabaseView 註解,將類別宣告為已儲存的查詢,也稱為檢視畫面b/67033276
  • 自動值:Room 現在支援將包含 AutoValue 註解的類別宣告為實體和 POJO。您現在可以透過自動值註解類別的抽象方法宣告 @PrimaryKey@ColumnInfo@Embedded@Relation 這些 Room 註解。請注意,這些註解也必須附上 @CopyAnnotations,這樣 Room 才能正確解讀註解。b/62408420
  • 其他 Rx 傳回類型支援:包含 @Insert@Delete@Update 註解的 DAO 方法現在支援 Rx 傳回類型 CompletableSingle<T>Maybe<T>b/63317956
  • 包含 @Relation 的不可變動類型:Room 先前要求 @Relation 註解欄位必須可供設定,但現在可以是建構函式參數。
  • enableMultiInstanceInvalidationRoomDatabase.Builder 中的新 API,可讓多個使用同一資料庫檔案的 RoomDatabase 執行個體失效。這項多執行個體撤銷機制也適用於多個程序。b/62334005
  • fallbackToDestructiveMigrationOnDowngrade:這是 RoomDatabase.Builder 中的新 API,可在發生降級時自動重新建立資料庫。b/110416954
  • ignoredColumns:這是 @Entity 註解中的新 API,可依名稱列出遭忽略的欄位。適合用於忽略特定實體的沿用欄位。b/63522075

API/行為變更

  • RoomDatabase 中的 mCallbackmDatabase 現已淘汰 (@Deprecated),並將在下一個 Room 的主要版本中移除。b/76109329

修正錯誤

  • 修正了 Room 在初始化期間無法正確地從資料庫毀損或遷移無效錯誤中復原的兩個問題。b/111504749b/111519144
  • Room 現在會在資料類別中正確使用 Kotlin 的主要建構函式,而不必將這些欄位宣告為 varsb/105769985

2018 年 10 月 1 日

Room 2.0.0 發布,且自 2.0.0-rc01 版以來皆無異動。Paging 2.0.0 發布,修正一項錯誤。

Paging

修正錯誤

  • 修正了使用 PositionalDataSource 和預留位置進行極快速捲動時可能發生的異常終止問題 b/114635383

2018 年 9 月 21 日

Lifecycle 2.0.0 發布,修正 ViewModel 中 2.0.0-rc01 的一項錯誤。

Lifecycle

修正錯誤

  • 修正了錯誤移除建構函式的 ViewModel ProGuard 規則 b/112230489

2018 年 9 月 20 日

Navigation 1.0.0-alpha06 發布,修正多項錯誤並推出 API 變更。

新功能

API 變更

  • 破壞性變更:Navigator navigate() 方法現在接受 Navigator.Extras 參數。
  • NavController 的 getGraph() 方法現在為 NonNullb/112243286

修正錯誤

  • NavigationUI.setupWithNavController() 與個別目的地的檢視搭配使用時,不會再洩露檢視內容 b/111961977
  • 系統現在只會呼叫 Navigator onSaveState() 一次 b/112627079

Safe Args

  • 導覽目的地的 Directions 類別現在會擴充其父項 Directions 類別 (如果有的話)。b/79871405
  • Directions 和 Args 類別現在具備實用的 toString() 實作 b/111843389

2018 年 9 月 19 日

WorkManager

WorkManager 1.0.0-alpha09 發布,修正多項錯誤、更新基礎架構並推出 API 變更。

已知問題

如果您遇到以下問題:「找到多個檔案採用獨立於 OS 的路徑『META-INF/proguard/androidx-annotations.pro』」,請在 Gradle 檔案中加入下方內容,做為暫時性解決方案;我們將在 alpha10 中修正這個問題:

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

修正錯誤

  • 新增了另一項用於解決「100 個工作」錯誤的必備修正項目。b/115560696
  • 新增了一些修正項目,用於解決因競爭狀況而導致的外鍵限制錯誤。b/114705286
  • ConstraintTrackingWorker.onStopped(boolean) 呼叫委派至基礎 Workerb/114125093
  • 針對 Firebase JobDispatcher 強制採用正確的最短輪詢延遲時間。b/113304626
  • 改善了程式庫內部的執行緒保證。
  • 修正在內部刪除重複的 LiveData 時可能發生的問題。

API 變更

  • 您現在可以在執行階段建立自己的 Worker 例項,方法是在 WorkManager.Configuration 中指定 WorkerFactory。備用工廠函式為 DefaultWorkerFactory,與舊版 WorkManager 的行為相符。
    • WorkerNonBlockingWorker 的預設建構函式現已標示為已淘汰。請使用新的建構函式 (Worker(Context, WorkerParameters)) 並呼叫 super(Context, WorkerParameters);日後推出的 WorkManager 版本將移除該預設建構函式。
  • 我們已開始在內部使用新的 ListenableFuture 構件 (不含 Guava 依附元件),並且將在日後推出的 API 版本中導入 ListenableFutures。這項變更將推動在最終取消隱藏 NonBlockingWorker
  • 新增透過 TestDriver.setInitialDelayMet(UUID)TestDriver.setPeriodDelayMet(UUID)TestDriver 中觸發定時工作的功能。b/113360060

破壞性變更

  • 淘汰了預設的 WorkerNonBlockingWorker 建構函式。請盡快遷移至新的建構函式。日後推出的版本將移除該預設建構函式。

2018 年 8 月 27 日

WorkManager

WorkManager 1.0.0-alpha08 發布,修正多項錯誤。

修正錯誤

  • 將 WorkManager 元件明確標示為不具備直接啟動感知特性,以免這些元件在直接啟動期間觸發。日後,我們將提供具有直接啟動感知特性的 WorkManager 版本。b/112665532
  • 修正了重試的工作無法執行的問題。b/112604021
  • 修正了週期性工作無法重複執行的問題 (與上述問題相關)。b/112859683
  • 在應用程式程序已開始執行時遵守輪詢政策。
  • 修正了 Data 中顯示的例外狀況訊息,指出上限為 10 KB。
  • Configuration.setMaxSchedulerLimit(int) 的上限值下修至 50,以因應 JobScheduler 在完成過程中的一些延遲。b/112817355

2018 年 8 月 16 日

WorkManager

WorkManager 1.0.0-alpha07 發布,修正多項錯誤並推出小幅 API 變更。

修正錯誤

  • 修正了在 SQL 查詢中可使用負數限制的問題,這類查詢可能會傳回無限量的結果。
  • 已完成執行的工作現在會正確地取消其在其他排程器中的所有待處理副本。原本這些副本會導致 JobScheduler 工作數量超出上限。b/111569265
  • 修正了 ConstraintTracker 中發生的 ConcurrentModificationExceptionb/112272753
  • Data.getBooleanArray(String)Data.getIntArray(String) 的傳回類型註解變更為 @Nullable,而非 @NonNullb/112275229

API 變更

  • Worker 現在擴充了一個新類別 NonBlockingWorker。這不會影響目前使用情形。日後,NonBlockingWorker 將成為 API 全面支援的實體,適用於自訂執行緒解決方案。
  • Data.getBooleanArray(String)Data.getIntArray(String) 的傳回類型註解變更為 @Nullable,而非 @NonNullb/112275229
  • Kotlin 擴充功能:淘汰了 Map.toWorkData() 並新增了頂層 workDataOf(vararg Pair<String, Any?>),以提高與現有 API 的一致性。

2018 年 8 月 10 日

Navigation 1.0.0-alpha05 發布,修正多項錯誤。

修正錯誤

  • 修正導致返回堆疊行為不正確的錯誤。b/111907708
  • 修正所產生的 Args 類別在 equals() 中的錯誤。b/111450897
  • 修正 Safe Args 中的建構失敗問題。B/109409713
  • 修正將資源 ID 轉換成 Java 名稱時發生的問題。b/111602491
  • 修正 Safe Args 外掛程式中針對是否可為空值顯示的錯誤訊息。
  • 新增原本遺漏的是否可為空值註解。

2018 年 8 月 6 日

AndroidX 版的 Lifecycle、Room 和 Paging 發布 2.0.0-rc01 版本。所有構件皆與 2.0.0-beta01 相同。

2018 年 8 月 1 日

WorkManager

WorkManager 1.0.0-alpha06 發布,修正多項錯誤。

修正錯誤

  • 防止資料庫在安排工作時間時遭到鎖定。b/111801342
  • 修正在打盹模式中導致 PeriodicWork 無法依時間表執行的錯誤。b/111469837
  • 修正在追蹤限制時的競爭狀況,以避免 WorkManager 異常終止。googlecodelabs/android-workmanager/issues/56
  • 使用 WorkRequest.Builder#build() 時可建立專屬的 WorkRequestb/111408337
  • 只在 WorkRequest 有需要時才啟用 RescheduleReceiverb/111765853

2018 年 7 月 24 日

WorkManager

WorkManager 1.0.0-alpha05 發布,做出重要錯誤修正與記錄變更。

API 變更

  • WorkManager.getInstance() 現在加上的註解為 @NonNull,而非 @Nullable。如果採用手動初始化,而單例模式未正確地初始化,該方法將擲回 IllegalStateException這是一項破壞性的 API 變更。
  • 新增了 Configuration.Builder.setMinimumLoggingLevel(int) 這個新的 API,可控管 WorkManager 詳細程度。根據預設,WorkManager 會記錄 Log.INFO 以上級別的資訊。
  • 變更了 Data.getString() 的簽名,使其不再接受預設值 (默示為 null)。這是一項破壞性的 API 變更。
  • 將部分只有內部需要使用的方法標示為 @hide。這包括 Constraints 建構函式、Data.toByteArray()Data.fromByteArray(byte[])這是一項破壞性的 API 變更。

修正錯誤

  • 針對已知的自動備份情況,WorkManager 不會再執行工作,否則可能會導致異常終止。b/110564377
  • 修正了使用 JobScheduler 時發生的 PeriodicWorkRequest 重複排程問題。b/110798652
  • 修正了 PeriodicWorkRequest 在裝置進入打盹狀態後無法正確執行的問題。b/111469837
  • 修正了使用 Firebase JobDispatcher 時發生的初始延遲問題。b/111141023
  • 修正了部分的潛在競爭狀況和時機問題。
  • 正確地釋出了不再需要的 BroadcastReceiver
  • 針對遭到強制關閉並重新啟動的應用程式,盡量提高重新排程成效。
  • 允許在指定的 WorkRequest 之前或之後呼叫 TestScheduler.setAllConstraintsMet(UUID)b/111238024

破壞性變更

  • WorkManager.getInstance() 現在加上的註解為 @NonNull,而非 @Nullable
  • 變更了 Data.getString() 的簽名,使其不再接受預設值 (默示為 null)。
  • 將部分只有內部需要使用的方法標示為 @hide。這包括 Constraints 建構函式、Data.toByteArray()Data.fromByteArray(byte[])

2018 年 7 月 19 日

Navigation 1.0.0-alpha04 和相關聯的 Safe Args Gradle 外掛程式包含多項 API 變更、行為變更和錯誤修正。

API/行為變更

  • NavHostFragment 一律會將目前的 Fragment 設為主要導覽片段,以確保先彈出子項片段管理員,再彈出外部的 NavController。b/111345778

Safe Args

  • 破壞性變更:app:type 已變更為 app:argType,以免與 ConstraintLayout 2.0.0-alpha1 等其他程式庫發生衝突。b/111110548
  • Safe Args 顯示的錯誤訊息現在可供點選。b/111534438
  • Args 類別現在會確認 NonNull 屬性實際並非空值 b/111451769
  • 為 NavDirections 和 Args 所產生的類別新增 NonNull 註解。b/111455455 b/111455456

修正錯誤

  • 修正了透過深層連結連往片段目的地後發生的系統返回按鈕問題 b/111515685

2018 年 7 月 12 日

Navigation 1.0.0-alpha03 和相關聯的 Safe Args Gradle 外掛程式包含多項 API 變更、行為變更和錯誤修正。

API/行為變更

  • 新增了工具列適用的 NavigationUI.setupWithNavController 方法 b/109868820
  • 新增了 CollapsingToolbarLayout 適用的 NavigationUI.setupWithNavController 方法 b/110887183
  • 現在,如果返回堆疊為空白或指定目的地 ID 不在返回堆疊中,popBackStack() 會傳回 false。b/110893637
  • 現在,FragmentNavigator 在 FragmentManager 儲存狀態後會忽略導覽作業,以避免「無法在 onSaveInstanceState 之後執行這項動作」例外狀況 b/110987825

Safe Args

  • 破壞性變更:如果動作和引數名稱包含非英數字元,在各自的 NavDirections 方法名稱中將改用駝峰式大小寫
    • 例如:DemoController.index 會變成 setDemoControllerIndex b/79995048
    • 例如:action_show_settings 會變成 actionShowSettings b/79642240
  • 破壞性變更:現在系統預設會將引數視為非空值。想讓字串和可剖析引數使用空值,請新增 app:nullable="true" b/79642307
  • 您現在能夠以「123L」的格式將 app:type="long" 與 defaultValue 搭配使用。b/79563966
  • 現在支援可剖析引數,只要在 app:type 使用完整的類別名稱即可。唯一支援的預設值為 "@null" b/79563966
  • Args 類別現在會導入 equals()hashCode() b/79642246
  • Safe Args 外掛程式現在可套用至程式庫專案。b/80036553
  • Safe Args 外掛程式現在可套用至功能專案。b/110011752

修正錯誤

  • 修正在 Fragment 生命週期方法執行期間進行導覽時發生的問題。b/109916080
  • 修正在透過巢狀結構圖多次進行導覽時發生的問題 b/110178671
  • 修正在搭配使用 setPopUpTo 與圖形中第一個目的地時發生的問題。/b/109909461
  • 修正所有 app:defaultValue 值都是以 String 形式傳遞的問題。b/110710788
  • Android Gradle 外掛程式 3.2 Beta 01 版隨附的 aapt2 現在會為 Navigation XML 檔案中的每個 android:name 屬性新增保留規則。b/79874119
  • 修正了在取代預設 FragmentNavigator 時發生的記憶體流失問題 b/110900142

2018 年 7 月 2 日

AndroidX 版的 Lifecycle、Room 和 Paging 發布 2.0.0-beta01 版本。

Lifecycle

修正錯誤

  • 修正了 LifecycleObserver ProGuard 規則,僅保留實作項目,不保留子介面 (b/71389427)
  • 修正了 ViewModel ProGuard 規則,以允許模糊處理與縮小操作

Room

API/行為變更

  • 新增了 RoomDatabase.Builder.setQueryExecutor(),以便自訂查詢執行位置
  • 新增了 RxJava2 Observable 支援
  • 原先產生的 DAO 和資料庫實作現已定案

修正錯誤

  • 指定「cannot find getter for field」(找不到欄位的 getter) 錯誤訊息中的類別/欄位名稱 b/73334503
  • 修正了 RoomOpenHelper 與 Room 較舊版本的回溯相容性問題 b/110197391

Paging

修正錯誤

  • 修正原本在某些情況下 (預留位置已停用,PositionalDataSource) 內容會消失的問題 b/80149146
  • (已在 1.0.1 中發布) 修正了 PagedListAdapterAsyncPagedListDiffer 無法發出移動事件信號的異常終止問題 b/110711937

2018 年 6 月 26 日

Paging

Paging 1.0.1 發布,修正 runtime 中的一項錯誤。我們強烈建議您使用 1.0.1 以確保穩定性。Paging RxJava2 1.0.1 也同時推出,它與 1.0.0-rc1 完全相同。

修正錯誤

  • 修正了 PagedListAdapterAsyncPagedListDiffer 無法發出移動事件信號的異常終止問題。b/110711937

WorkManager

WorkManager 1.0.0-alpha04 發布。

修正錯誤

  • 現在當 PeriodicWorkRequest 使用以 AlarmManager 為基礎的實作時,能夠正確地重新排程。

  • 修正在強制停止或重新啟動後,為所有工作站重新排程時可能發生的 ANR 問題。b/110507716

  • 為各個 WorkManager API 新增了是否可為空值註解。b/110344065

  • 記錄在工作站執行期間所發生卻未偵測到的例外狀況。b/109900862

  • 允許遷移破壞性資料庫,以防您日後決定復原至舊版 WorkManager。b/74633270

  • 修正了因建立重複的隱式標記而導致的遷移異常終止問題。這種問題十分罕見,只有在您本身使用相同的隱式標記格式時才會發生。

2018 年 6 月 19 日

Room

Room 1.1.1 發布。這個版本與 Room 1.1.1-rc1 完全相同。

WorkManager

WorkManager 1.0.0-alpha03 發布。

修正錯誤

  • 修正 AlarmManager 型實作方式中的競爭狀況。b/80346526

  • 修正了在裝置重新啟動後使用 JobScheduler 時工作重複的問題。

  • 具備內容 URI 觸發條件的工作現在於重新啟動後仍會保留。b/80234744

  • 說明文件更新。b/109827628b/109758949b/80230748

  • 修正將 WorkRequest 重新加入佇列時發生的異常終止問題。b/109572353

  • 修正了使用 work-runtime-ktx 依附元件時顯示的 Kotlin 編譯器警告。

  • WorkManager 現在採用 Room 1.1.1-rc1 版。

API 變更

  • 新增了 WorkContinuation.getStatuses() 同步版 getStatusesSync()

  • Worker 能夠區別由使用者啟動的取消操作以及由 OS 要求的暫時性停止操作。如果收到任何種類的停止要求,Worker.isStopped() 將傳回 true。如果工作明確遭到取消,Worker.isCancelled() 將傳回 trueb/79632247

  • 針對 API 28 新增了 JobParameters#getNetwork() 支援。這會透過 Worker.getNetwork() 顯示。

  • 新增了 Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit),方便您強制規定可傳送到 JobSchedulerAlarmManager 的工作數量。這有助於防止 WorkManager 佔用所有可用的 JobScheduler 運算單元。

  • 新增了 Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId),以協助定義可供 WorkManager 安全使用的 JobScheduler 工作 ID 範圍。b/79996760

  • Worker.getRunAttemptCount() 會傳回特定 Worker 目前的執行作業計數。b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) 可讓您將不重複的 PeriodicWorkRequest 加入佇列。b/79600647

  • WorkManager.cancelAllWork() 會取消所有 Worker。依附於 WorkManager 的程式庫可以使用 WorkManager.getLastCancelAllTimeMillis() 查詢上次呼叫這個方法的時間,以便對內部狀態進行進一步清理。

  • 新增了 WorkManager.pruneWork(),以便將已完成的工作從內部資料庫中移除。b/79950952b/109710758

行為變更

  • 為所有 WorkRequest 新增了隱式標記,也就是 Worker 的完整類別名稱。這樣一來,即使沒有 tag 或無法使用 id,也能移除 WorkRequestb/109572351

破壞性變更

  • Worker.WorkerResult 已重新命名為 Worker.Result

  • Worker.onStopped 現在增設了 isCancelled 參數,該參數在 Worker 明確遭到取消時會設為 true

2018 年 6 月 7 日

Navigation 1.0.0-alpha02 發布。

行為變更

  • FragmentNavigator 現在採用 setReorderingAllowed(true)b/109826220

  • Navigation 現在會對從深層連結網址剖析出的參數進行 URLDecode 處理。b/79982454

修正錯誤

  • 修正了在透過 Fragment 生命週期方法呼叫 navigate 時發生的 IllegalStateExceptionb/79632233

  • 為修正使用動畫時的閃爍問題,Navigation 現在依附於支援資料庫 27.1.1。b/80160903

  • 修正在使用 defaultNavHost="true" 做為子項片段時發生的 IllegalArgumentExceptionb/79656847

  • 修正了在使用 NavDeepLinkBuilder 時發生的 StackOverflowErrorb/109653065

  • 修正在導覽回巢狀結構圖時發生的 IllegalArgumentExceptionb/80453447

  • 修正使用 launchSingleTop 時的 Fragment 重疊問題。b/79407969

  • Navigation 現在會為巢狀圖建構正確的合成返回堆疊。b/79734195

  • 現在使用巢狀結構圖做為 MenuItem 時,NavigationUI 會醒目顯示正確的項目。b/109675998

API 變更

  • 淘汰了動作的 clearTask 屬性和 NavOptions 中相關聯的 API。b/80338878

  • 淘汰了動作的 launchDocument 屬性和 NavOptions 中相關聯的 API。b/109806636

2018 年 5 月 24 日

WorkManager 1.0.0-alpha02 發布。

WorkManager

修正錯誤

  • 修正了 State.isFinished()NullPointerExceptionb/79550068

  • 修正了導致 WorkerApplication.onCreate() 時重新排程的問題。b/79660657

  • 修正了排程工作數量可超出 OS 規定上限的問題。b/79497378

  • 將與 Worker 相關聯的 Wake Lock 清理作業移至背景執行緒。

  • 現在當所有待處理工作完成時,AlarmManager 實作會正確地進行清理。

  • 修正了對非英文使用地區造成影響的清理 SQL 查詢。b/80065360

  • Data 中新增了的 float 支援。b/79443878

  • Data.Builder.putAll() 現在會傳回 Builder 的例項。b/79699162

  • 在說明文件中提供更多 Javadoc 和修正項目。b/79691663

API 變更

  • Worker 可對中止處置做出回應。Worker.isStopped() 可用於檢查 Worker 是否已遭中止,Worker.onStopped() 則可用於執行輕量清理作業。

  • Worker.getTags() API 會傳回與 Worker 相關聯的標記 Set

  • 為 API 新增了 javax.time.Duration 多載,可接受時間長度和 TimeUnit 的組合。這受到 @RequiresApi(26) 的防護。

  • WorkManager 擴充功能已從 androidx.work.ktx 套件移至 androidx.work 套件。已淘汰舊的擴充功能,且將在日後推出的版本中移除。

  • 淘汰了 Configuration.withExecutor(),請改用 Configuration.setExecutor()

2018 年 5 月 16 日

Paging RxJava2 1.0.0-rc1 和 Room 1.1.1-rc1 發布。如果您採用遷移功能,強烈建議您使用 Room 1.1.1-rc1,而不要使用 1.1.0

Room

修正了 Room 無法正確地處理遷移後初始化作業的問題 b/79362399

Paging

Paging rxjava2 將移至候選版,且自初始的 Alpha 版以來皆無異動。

2018 年 5 月 8 日

Paging 1.0、Navigation 和 WorkManager Alpha 版、Room 1.1、AndroidX

Paging 1.0.0Room 1.1.0 發布,同時推出 Navigation 和 WorkManager 這兩種新架構元件的 Alpha 版。

Paging 和 Room 自最新候選版以來皆無異動。

新程式庫:Navigation

Navigation 提供一個架構,可用於建構應用程式內導覽功能。初始版本為 1.0.0-alpha01

新程式庫:WorkManager

WorkManager 能夠為受到保證、可感知限制的背景工作簡化排程與執行作業。初始版本為 1.0.0-alpha01

AndroidX

架構元件即將遷移成為 AndroidX 的一部分,包括更新的套件名稱、構件名稱和其他 AndroidX 程式庫的依附元件。這些項目會在 2.0.0-alpha1 版下發布,與其他 AndroidX 程式庫搭配使用。

Kotlin 擴充功能

ViewModel、ReactiveStreams 和 Sqlite (原為 Room 的「Database」元件) 都在 Android Alpha 版本中加入了 Kotlin 擴充功能程式庫。此外,Navigation 和 WorkManager 也包含 -ktx 模組。您可以在新增元件中找到這些擴充功能模組。

2018 年 5 月 2 日

  • Room 1.1.0 候選版
  • Room 1.1.0-rc1 發布。

修正錯誤

2018 年 4 月 19 日

Paging 候選版

Paging 1.0.0-rc1 和 Room 1.1.0-beta3 發布。

Paging

我們在 Paging 1.0.0 版本中沒有加入任何其他已知問題修正項目或新增功能。請將專案升級並改用 1.0.0-rc1,協助我們對這個版本進行實戰測試,進而推出穩定可靠的 1.0.0

這個版本並無任何異動,與 1.0.0-beta1 相同。

Room

修正錯誤

  • 修正當 Kotlin POJO 參照 Java 中定義的關聯實體時發生的編譯錯誤 b/78199923

2018 年 4 月 5 日

Room 1.1.0-beta2、Paging 1.0.0-beta1 和 Paging RxJava 1.0.0-alpha1 發布。

Paging 會先在 Beta 階段進行短時間的測試,再推出候選版。目前我們並無規劃要對 Paging 1.0 做進一步 API 變更,進行 API 變更的門檻也非常高。

Paging 的 Alpha RxJava2 的支援功能已做為可另外選擇的模組 (android.arch.paging:rxjava2:1.0.0-alpha1) 發布,在穩定前將暫時分為獨立版本。

這個新程式庫可讓您以 RxJava2 取代 LivePagedListBuilder,能建構 ObservableFlowable,接受 Scheduler 而不是 Executor

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Paging

新功能

  • 透過新的 android.arch.paging:rxjava2 構件新增了 RxPagedListBuilder

API 變更

  • 修改 API 以闡明執行工具在建構工具中的作用:

    • setBackgroundThreadExecutor() 已重新命名為 setFetchExecutor() (在 PagedList.BuilderLivePagedListBuilder 中)

    • setMainThreadExecutor() 已重新命名為 setNotifyExecutor() (在 PagedList.Builder 中)。

  • PagedList.mCallbacks 成員的狀態修正為不公開。

修正錯誤

  • LivePagedListBuilder 將在指定的執行工具 (而非 Arch 元件 IO 執行緒集區) 中觸發初始 PagedList 載入程序。

  • 修正了內部 DataSource 包裝函式中的失效行為,這類包裝函式是用於導入 DataSource.map 及停用預留位置的 PositionalDataSource 載入功能 b/77237534

Room

修正錯誤

  • 修正了 Room 的 Rx SingleMaybe 實作中提前回收查詢的重大錯誤;在該錯誤的影響下,如果您在傳回的 SingleMaybe 執行個體中加入超過 1 個觀測工具,就會發生問題。b/76031240

  • 如果是透過交易呼叫 RoomDatabase.clearAllTables,該方法不會對資料庫執行 VACUUM 操作。b/77235565

2018 年 3 月 21 日

Room 1.1.0-beta1、Paging 1.0.0-alpha7 和 Lifecycles 1.1.1 發布。

Room

API 變更

修正錯誤

  • RoomDatabase.clearAllTables 現在會嘗試設定 WAL 檢查點並對資料庫執行 VACUUM 操作,將空間還給作業系統。

  • @RawQuery 現在接受在 observedEntities 屬性中使用任何 Pojo,前提是 Pojo 透過其 Embedded 欄位或 Relation 參照了一或多個實體。b/74041772

  • Paging:Room 的 DataSource 實作現在能夠正確地處理多資料表依附元件 (例如關係和彙整項目)。先前,這些方法無法觸發新結果,或是可能無法編譯。b/74128314

Lifecycles

只有一項小幅異動:android.arch.core.util.Functionarch:runtime 移至 arch:common。這樣一來,即使沒有執行階段依附元件,也能使用該函式,例如在下方的 paging:common 中使用。

lifecycle:commonlifecycle:runtime 的依附元件,因此這項變更不會直接影響 lifecycle:runtime,只會影響 Paging 等直接依附於 lifecycle:common 的模組。

Paging

Paging 1.0.0-alpha7 連同 Lifecycles 1.1.1 一起發布。由於 Paging alpha7 仰賴上方提及的 Function 類別移動,您必須將 lifecycle:runtime 依附元件更新為 android.arch.lifecycle:runtime:1.1.1

Paging alpha7 預計將是 Paging 進入 Beta 階段前的最後一個發布版本。

API 變更

  • DataSource.LoadParams 物件具有公用建構函式,DataSource.LoadCallback 物件是抽象物件。這樣一來,就能包裝 DataSource 或直接使用模擬回呼測試 DataSourceb/72600421
  • 提供 DataSource 和 DataSource.Factory 的對應工具。
    • map(Function<IN,OUT>) 可讓您轉換、包裝或修飾 DataSource 所載入的結果。
    • mapByPage(<List<IN>,List<OUT>>) 可讓您批次處理載入項目 (例如,如果從 SQL 載入的項目需要另外查詢獨立的資料庫,可採批次處理方式完成)。
  • 新增了 PagedList#getDataSource() 做為便利方法。b/72611341
  • 從 API 中移除所有淘汰類別,包括 recyclerview.extensions 套件的其餘部分和 LivePagedListProvider
  • DataSource.Factory 從介面變更為抽象類別,以啟用對應功能。

修正錯誤

  • 將建構工具變更為最終版。b/70848565
  • Room DataSource 實作現在經過修正,可處理多資料表查詢;這項修正包含在 Room 1.1.0-beta1 中 (請見上文)。
  • 修正了在啟用預留位置且總大小為網頁大小的整數倍數時,無法為 PositionalDataSource 叫用 BoundaryCallback.onItemAtEndLoaded 的錯誤。

2018 年 3 月 2 日

Room 1.1.0-alpha3 發布。這是 Room 1.1.0 預計推出的最後一個 Alpha 版本。

API 變更

  • InvalidationTrackeraddObserverremoveObserver 方法現已同步,需要透過非 UI 執行緒呼叫。這可防止在觀測資料表時發生某些競爭狀況。

  • RoomDatabase 類別有一個新的 clearAllTables() 方法,可截斷所有資料表內容。b/63807999

  • SupportSQLiteQuery 現在有一個 getArgCount() 方法,可傳回查詢參數的數量。b/67038952

修正錯誤

  • Paging 查詢現可正確支援 @RawQueryb/72600425

  • Room 現在可正確地為所產生的 Dao 類別命名,避免同為某個套件內部類別的 2 或多個 Dao 介面因使用相同名稱而發生衝突的情況。b/73536380

  • 系統會將 Pojo 中的一般欄位類型正確地剖析為擴充類別的成員。b/73534868

  • 系統可正確地剖析 Dao 介面中沿用自依附元件構件的查詢參數。b/68118746

  • @Relation 所產生的查詢現在可正確地逸出欄位名稱。b/70925483

2018 年 2 月 27 日

Paging 1.0.0-alpha6 連同支援資料庫 27.1.0 一起發布。 ListAdapter 和幾個相關類別已直接從 Paging 程式庫移至 RecyclerView,另外還有一些重新命名異動,目的是讓特定類別的函式更明顯易懂。這個 Paging Alpha 版本可能是最後一個包含重大 API 變更的版本。

API 變更

  • 類別已移至 recyclerview-v7:
    • ListAdapter
  • 類別已重新命名並移至 recyclerview-v7:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • 類別在 paging-runtime 中已重新命名:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

經移動的類別是與 RecyclerView 有搭配使用效應,而獨立於 Paging 程式庫的類別。也就是說,這些類別不必依附於 Paging Alpha 版本即可使用,但這也代表採用 Paging 的應用程式必須同時升級至 Alpha 6 和支援資料庫 27.1.0。

** Paging Alpha6 遷移指南:**

  • 將 Paging 和 RecyclerView 週期依附元件更新為 android.arch.paging:runtime:1.0.0-alpha6com.android.support:recyclerview-v7:27.1.0
    • 這些更新必須同時完成,原因是 ListAdapter 已從 Paging 移至 RecyclerView
  • 將所有 ListAdapterHelper 參照更新為 AsyncListDiffer
    • 目前已移除 getItem(index)/getItemCount(),取而代之的模式為呼叫更明確的 getCurrentList().getItem(index)getCurrentList().size()
  • 將所有 ListAdapterConfig 參照更新為 AsyncDifferConfig
  • 將所有 DiffCallback 參照更新為 DiffUtil.IttemCallback
  • 將所有 PagedListAdapterHelper 參照更新為 AsyncPagedListDiffer
  • setList() 參照更新為 submitList()
    • 透過重新命名清楚顯示清單差異比較的非同步性質

修正錯誤

  • 修正了停用預留位置後傳遞到初始載入的初始位置不正確的問題。b/73513780

2018 年 2 月 15 日

Room 1.1.0-alpha2 發布。

新功能

  • Room 現在支援在預先寫入記錄模式中開啟資料庫。在這個模式中,您的寫入資料不會再封鎖您的讀取查詢。雖然這個模式會耗用較多記憶體 (因為有多個連線),但執行速度通常更快。根據預設,如果裝置採用 API 16 以上級別,且並非低記憶體裝置,Room 會使用 WAL。您可以在 RoomDatabase.Builder 中使用 setJournalMode() 方法來控制這項行為。b/67757002

  • Guava 支援:Room 現在支援在 DAO 查詢中傳回 Guava Optional<T>ListenableFuture<T>。如要使用 ListenableFuture<T>,您必須從 Room 匯入 guava 構件 (android.arch.persistence.room:guava:1.1.0-alpha2)。

  • Room 現在支援從 DAO 查詢傳回 java.util.Optional<T>

  • DAO 類別中的 @Transaction 方法現在支援使用介面方法搭配預設實作。這適用於 Java 8Kotlinb/72416735

修正錯誤

  • 採用 @Relation 的建構函式在有其他可使用的建構函式時,不會造成編譯錯誤。b/72884434

  • @Query 方法中採用 ' 逸出的資料表名稱,現在於失效追蹤工具中可正確地逸出。b/72366965

  • 現在,Room 在註解處理期間會使用 Kotlin @Metadata 註解來讀取類別結構。換句話說,即使類別從依附元件沿用了 pojo,Room 也能正確讀取其建構函式參數名稱。b/67181813

  • 修正了尋找降級遷移路徑時的問題。b/72153525

  • 從現有資料庫遷移至 Room 時,系統現在可正確地處理非預設資料欄類型。b/71953987

  • Room 現在可正確地處理 Kotlin 類別中留存的 boolean? 欄位。b/72786402

2018 年 1 月 22 日

Lifecycles 1.1.0、Room 1.1.0-alpha1 和 Paging 1.0.0-alpha5 發布。

Lifecycle 1.1.0

包裝變更

現在提供縮小許多的新型依附元件:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

API 變更

  • 現在移除了已淘汰的 LifecycleActivityLifecycleFragment,請改用 FragmentActivityAppCompatActivity 或支援 Fragment
  • ViewModelProvidersViewModelStores 新增了 @NonNull 註解。
  • 淘汰了 ViewModelProviders 建構函式,請直接改用其靜態方法。
  • 淘汰了 ViewModelProviders.DefaultFactory,請改用 ViewModelProvider.AndroidViewModelFactory
  • 新增了靜態的 ViewModelProvider.AndroidViewModelFactory.getInstance(Application) 方法,以擷取適合用於建立 ViewModelAndroidViewModel 執行個體的靜態 Factory

Room 1.1.0-alpha1

新功能

  • RawQuery:這個新的 API 允許 @Dao 方法接收 SQL 做為查詢參數 b/62103290b/71458963
  • fallBackToDestructiveMigrationsFromRoomDatabase.Builder 中的這個新的 API 可讓您精細掌控要從哪個起始結構定義版本允許破壞性遷移 (與 fallbackToDestructiveMigration 相比) b/64989640
  • Room 現在僅支援新版 Paging API (alpha-4 以上版本),不再支援已淘汰的 LivePagedListProvider。如要使用新的 Room Alpha 版,您需要使用 Paging alpha-4 以上版本,並從 LivePagedListProvider 切換至 LivePagedListBuilder (如果尚未這麼做的話)。

修正錯誤

  • 改善對 Kotlin Kapt 類型的支援。b/69164099
  • 欄位順序不會再使結構定義失效。b/64290754

Paging 1.0.0-alpha5

修正錯誤

  • 修正停用預留位置後的網頁載入問題 b/70573345
  • 提供額外記錄,以利追蹤 IllegalArgumentException 錯誤 b/70360195 (以及推測性 Room 修正項目)
  • Javadoc 程式碼範例修正項目 b/70411933b/71467637

2017 年 12 月 11 日

Paging alpha4-1 發布。這是 Paging Alpha 4 的小幅錯誤修正版本。

修正錯誤

2017 年 12 月 7 日

Paging alpha4 發布,包含重大變更和新增項目,大多數是針對網路以及網路 + 資料庫使用案例。

API 變更

  • DataSource 現在是非同步 API,可讓您輕鬆地直接從網路進行分頁:

    • 初始大小和資料的單一進入點
    • 支援網路重試,做法是保留回呼並於稍後分派
    • 執行緒安全回呼允許以非同步載入的方式,在 UI 執行緒上建立單一網路支援的 PagedList
    • 更清楚地顯示與初始載入參數有關的錯誤行為
  • TiledDataSource 已重新命名為 PositionalDataSource,以反映其根據位置設定的索引,以及其在預留位置停用時不會並排顯示的情況。

  • 新增了 PageKeyedDataSource,以支援內嵌於網路網頁載入內容中的下一個/上一個符記。KeyedDataSource 已重新命名為 ItemKeyedDataSource,以利清楚區別。

  • LivePagedListBuilderDataSource.Factory 取代了 LivePagedListProvider。該建構工具提供相同功能,但支援更多元的自訂設定與更簡單的預設值。該工廠則可讓 DataSource 的產生程式碼保持獨立於 LiveData

  • 為資料庫 + 網路使用案例新增了 PagedList.BoundaryCallback

  • PagedList.Builder 建構函式接受 DataSource + PagedList.Config,現在更類似 LivePagedListBuilder,並允許使用 Java 語言的菱形運算子或 Kotlin 的推測類型。

  • 新增了 PagedList.getConfig(),而 PagedList.Config 現在具備公開成員屬性。

  • KeyedDataSource.loadBefore() 不會再預期結果遭到撤銷。

  • 新增了 PagedListAdapter.onCurrentListChanged(),以監聽最新消息並掌握目前顯示的 PagedList。

修正錯誤

  • 修正了 PagedListAdapter(Helper) 中發生的 IndexOutOfBoundsException b/67883658

1.0.0 - 2017 年 11 月 6 日

所有主要元件 (Paging 除外) 現已達到 1.0.0 版。除了對 reactivestreams 程式庫做出了一項變更外,這個版本與 rc1 完全相同。

修正錯誤

候選版 - 2017 年 10 月 18 日

所有主要構件 (Paging 除外) 現在都是 1.0.0-rc1 版。

我們在 1.0.0 版本中沒有安排任何其他已知問題修正項目或新增功能。請將專案升級改用 1.0.0-rc1,協助我們對這個版本進行實戰測試,進而推出穩定可靠的 1.0.0

行為變更

  • 在這個版本中,Lifecycle.Event#ON_STOP 現在會在 onSaveInstanceState 獲得呼叫時分派 (先前只會標示為 CREATED,不會在 ON_STOP 事件發生時分派)。詳情請參閱 Lifecycles 說明文件

修正錯誤

  • Room:

    • Room 現在依附於最新的 xerial 構件,該構件可在編譯期間修正 OutOfMemory 問題。b/62473121
    • Query 方法現在可以加上 @Transaction 註解。詳情請參閱 @Transaction 參考文件b/65112315
    • 將 Room 的 StringUtil 類別從公用 API 中移除 (從未打算用作公用 API)。
  • Lifecycles:

    • 當 Activity 有一部分是由 API 24 以下級別負責時,LiveData 也能正常運作。b/65665621

    • 現在能夠正確呼叫父項類別中的 OnLifecycleEvent 方法,否則在編譯期間會顯示警告。b/63474615

    • Lifecycle 現在會將 WeakReference 復原至其 LifecycleOwner,以免當生命週期保留在記憶體中,而 LifecycleOwner 外洩 (這是唯一的預防方式,請還是小心不要洩漏 Lifecycle)。

2017 年 10 月 9 日

Paging alpha-3 發布,這個新版本與 Lifecycles 和 Room 的 beta 2 版本相容。

修正錯誤

  • 改善 Paging 說明文件。

2017 年 10 月 5 日

所有主要構件 (Paging 除外) 現已達到 beta 2 版。 這次發布並未提供 Paging 新版本。

修正錯誤

  • Lifecycles:

    • 現在當 LiveData 處於停用狀態時,LiveDataReactiveStreams 可以正確地取消訂閱來源發布商。b/62609183
    • 當父項類別的來源為另一個模組時,生命週期事件也會正確地套用到該父項類別。b/63474615
    • 當觀測工具於訂閱項目建立期間取消訂閱時,LiveData 會正確處理觀測工具。b/66337741
    • 依附元件樹狀結構現在提供 Java 8 語言構件適用的 FullLifecycleObserverb/66525578

    • 針對 ProGuard,請在 ProGuard 檔案中加入下方這行程式碼。 (1.0.0 版正式發布後則可忽略)

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • Room:

    • 現在,如果 @Query 方法中傳回的 Pojo 有某個 @NonNull 欄位與查詢回應中的所有資料欄皆不相符,Room 會在編譯時顯示錯誤。如果該欄位為 @Nullable,則 Room 只會顯示警告。b/67115337
    • Room 現在可在新版 OS 中驗證索引。b/63132683
    • 如果 Pojo 中有多個相符的建構函式,Room 預設會挑選無引數的建構函式。b/67353427
    • 單一資料欄的主鍵如果是 IntegerLong,即可設為 Nullableb/67086876
    • 失效追蹤工具在測試模式中可正確處理重新輸入操作。 b/65471397
    • Room 現在會在編譯時檢查資料欄和資料表名稱中是否有無效字元 (無效字元:`")。b/64749111

2017 年 9 月 21 日

在這個版本中,所有架構元件模組都已至少達到 beta 1 (處於 alpha 2 的新 Paging 程式庫除外)。

我們沒有規劃任何其他 API 變更。雖然可能會有未規劃的變更,但是要在 1.0.0 穩定版發布之前變更任何 API 的門檻非常高,也不太可能發生。

  • LifecycleActivity 和 LifecycleFragment 會在 1.0.0 穩定版發布之前移除。使用支援資料庫 26.1.0 以上版本時不需要這些元件。

與 Alpha 階段不同,Beta 階段排定的時間長度極短。

版本變更

  • Lifecycle 擴充功能和 Room 現已達到 beta 1 版。
  • Paging 現已達到 alpha 2 版。
  • Lifecycles (runtime、common) 和 Arch Core (common) 沒有異動。這兩個構件自 9 月 13 日以來一直是 1.0.0 版。

新構件

  • Lifecycles 現在有一個新構件 common-java8。這個構件包含一個名為 DefaultLifecycleObserver 的新介面,當中有所有 Lifecycle 方法的預設實作。如果您使用的是 Java 8 語言,建議您使用這個構件,而非註解。

    • 由於 beta1 中的錯誤,您必須在 android.arch.lifecycle:common:1.0.1 模組中加入明確的依附元件,才能使用新的 common-java8 構件。這個問題將在 beta2 中修正。

包裝變更

  • android.arch.persistence.room.db 已移至 android.arch.persistence.db
  • android.arch.persistence.room.db-impl 已移動並重新命名為 android.arch.persistence.db-framework

這兩個構件都已經是 Room 的依附元件,因此除非您是直接使用這些構件,否則不需變更版本檔案中的任何內容。

API 變更

  • Room:

    • @ColumnInfo 註解現在支援為資料欄設定定序。b/62007004
    • 系統預設會忽略 transient 欄位,但這類欄位加上 @ColumnInfo@Embedded@Relation 註解時除外。b/62600692
    • 除非主鍵是由系統自動產生,否則一律必須加上 @NonNull 註解。b/64292391
      • 這項變更可能需要遷移結構定義。不便之處,敬請見諒。
    • 新增了一個便利註解 (@Transaction),可覆寫 DAO 方法並在交易中執行。
  • 支援 SQLite 資料庫:

  • Paging:

    • 改善 Paging 說明文件,提供更多範例和執行緒註解。

修正錯誤

  • Room:
    • 系統可正確處理 @Query 方法中的 Kotlin 多行字串。b/65809374
  • Paging:

1.0.0 Alpha 9-1 - 2017 年 9 月 13 日

這是主要版本,當中的核心 Lifecycle 構件 (runtime、common) 和 Arch Core (common) 皆已達到穩定版本 1.0.0

隨著這項變更,支援資料庫 26.1.0 現在依附於這些程式庫。 AppCompatActivitySupport Fragment 皆導入了 LifecycleOwner 介面。

這個版本也依附於支援資料庫 26.1.0,以充分運用新的整合功能。

新程式庫:Paging

這個版本還包括一個名為 Paging 的新程式庫,可讓您於必要時,輕鬆地將大型資料集分塊載入到 RecyclerView 中。Paging 發布 alpha1 版,將有專屬的發布週期。

API 變更

修正錯誤

  • 如果應用程式在類別路徑中含有該註解,產生的類別現在會加上 @Generated 註解。b/35754819

  • 修正了 MediatorLiveData 的觀測工具比較錯誤。b/64413274

  • [LiveData] 現在支援 SQLite WITH 查詢。[ref-LiveData] b/62510164

  • 修正了在觀測到多個資料表時,InvalidationTracker 無法傳送正確清單的錯誤。b/65099281

  • 修正了 Room 在 Windows 上會產生不同檔案的錯誤。b/64470691

  • 現在支援在根套件中使用 LifecycleObservers。b/62310817

1.0.0 Alpha 9 - 2017 年 8 月 16 日

修正錯誤

  • 修正了 LiveData 中的以下錯誤:在第一個 Observer 從所屬 onChanged 方法中移除後,第二個 Observer 會遭到忽略。b/64285805

1.0.0 Alpha 8 - 2017 年 8 月 1 日

行為變更

  • 針對原始類型或加上 NonNull 註解的資料欄,新增了 NOT NULL 限制。這會改變資料表的結構,因此如果您目前使用的是架構元件 Alpha 7 以下版本,必須執行遷移才能保留資料,或是在建構工具中使用 fallbackToDestructiveMigration() 方法。b/62007004

API 變更

1.0.0 Alpha 7 - 2017 年 7 月 26 日

修正錯誤

1.0.0 Alpha 6 - 2017 年 7 月 25 日

行為變更

  • 變更了 LifecycleObserver 呼叫的順序。先前,觀測工具一向是按照新增順序呼叫:如果 observer1 是在 observer2 之前新增,就會比 observer2 早收到 ON_CREATE 和所有其他事件。這已不適用於破壞性事件,現在其觀測工具的呼叫順序與新增順序完全相反。 因此,目前的行為如下:如果 observer1 的新增時間早於 observer2ON_CREATE 會先傳送至 observer1,再傳送至 observer2 (ON_STARTON_RESUME 也是如此),但 ON_PAUSE 活動會先傳送至 observer2,再傳送至 observer1 (ON_STOPON_DESTROY 也是如此)。

  • 如果缺少遷移作業,Room 會擲回例外狀況。過去 Room 只會清除資料庫,但現在會異常終止。 開發人員如想採用清除行為,可以呼叫建構工具 API。b/63872392

API 變更

  • RoomDatabase.Builder 新增了 fallbackToDestructiveMigration() 方法,這樣就能在缺少遷移作業時清除資料庫。b/63872392

  • 架構元件現在依附於支援資料庫 26.0.0。

修正錯誤

  • 修正了對 @Embedded 中建立的巢狀 @Relation 的處理方式。b/63736065

  • 針對採用自動遞增主鍵的資料表修正了測試遷移作業問題。b/63393618

  • 現在,執行 DELETE 或 UPDATE 查詢的 @Query 會正確接收引數。b/63872538

  • 現在,當擁有者片段位於返回堆疊中,而設定出現兩次變更時,系統會保留 ViewModelb/38445801

1.0.0 Alpha 5 - 2017 年 7 月 18 日

API 變更

您必須依附於 android.arch.persistence.room:rxjava2 構件,才能為 Room 新增 RxJava 支援。

修正錯誤

  • 修正了不含任何參數的 @Delete 查詢。b/63608092

  • 修正了 Room 的 getter 和 setter 類型檢查。b/63733651

1.0.0 Alpha 4 - 2017 年 7 月 11 日

API 變更

  • RoomDatabase 新增了便利方法 (runInTransaction())。

  • @Insert@Delete@Update 方法現在可使用來自不同實體類型的參數。b/62682405

修正錯誤

  • 修正了 @Dao 方法中的 byte[] 處理方式。b/62460045

  • Room 中的遷移作業檢查現在採用的比較方式不會區分大小寫。b/62875382

  • 修正了 Lifecycle 構件的 ProGuard 設定。b/62113696

1.0.0 Alpha 3 - 2017 年 6 月 15 日

API 變更

  • @OnLifecycleEvent 現在僅支援 1 個事件參數。 這項變更是為了為 Java 8 支援所做的準備工作,以便我們日後遷移至包含預設方法的介面。經過這項變更,只有包含 @OnLifecycleEvent(ON_ANY) 註解的方法可以接收第二個類型為 Event 的參數 (第一個參數為 LifecycleOwner)。詳情請參閱 Lifecycle 說明文件。

  • LifecycleActivityLifecycleFragment 類別已移入 android.arch.lifecycle:extensions 構件。

  • MigrationTestHelper 會接收檢測執行個體,而非 Context,這樣才能讀取測試素材資源中的結構定義,並在應用程式結構定義中建立資料庫。

  • @DAO 方法中的 @Insert@Delete@Update 註解現在可使用 Iterable 做為參數類型。b/62259820

修正錯誤

  • 系統不會再重複呼叫含有生命週期事件的覆寫方法。

  • 系統現在可正確處理多個 IN 參數。b/62608681

  • 抽象 DAO 類別現在可設定用於接收 @Database 執行個體的建構函式。b/38488747

  • DAO 現在可設定含有類型參數的超類別/介面。b/62103620

1.0.0 Alpha 2 - 2017 年 6 月 2 日

API 變更

修正錯誤

  • 提供適用於生命週期的 ProGuard 檔案。(b/62113696)
  • 修正了類型轉換工具的資料流失問題。(b/62100716)
  • 允許從 @Insert 查詢傳回 Long[]

1.0.0 Alpha 1 - 2017 年 5 月 17 日

MinSDK:14

一般公告

  • 儘管我們在推出前曾進行大量測試,但架構元件目前仍在 Alpha 測試階段。如要建置正式版應用程式,請注意在 1.0 版本發布前,API 將有變動,功能不一定完全可靠。如果您不習慣在自己使用的程式庫中進行偵錯,建議您先在個人專案中試用架構元件。

  • 我們不建議所有人立即進行遷移,稍後將為 1.0 版架構元件提供遷移指南。

已知限制和問題