2019 年 1 月 15 日
WorkManager
WorkManager 1.0.0-beta02
がリリースされました。このリリースにはバグの修正がいくつか含まれています。
バグの修正
- Android 6.0(API レベル 23)が搭載されているデバイスで定期タスクがインターバルごとに複数回実行される可能性があるエッジケースを修正しました。b/121998363
- Android 5.1(API レベル 22)以下が搭載されているデバイスで
ConcurrentModificationException
が発生する問題を修正しました。b/121345393 - Android 5.1(API レベル 22)以下が搭載されているデバイスで制約条件が満たされていない場合に作業が誤って実行される問題を修正しました。b/122578012
- 一部のエッジケースにおける作業完了処理が高速になるように最適化しました。b/122358129
- WorkManager が使用する
LiveData
の複数のインスタンス間における潜在的な競合状態に対処するための変更を追加しました。 Room
の依存関係に1.1.1-rc01
ではなく1.1.1
を使用するよう移行しました(これらのバージョンはまったく同じものです)。b/122578011
2018 年 12 月 19 日
WorkManager
WorkManager 1.0.0-beta01
がリリースされました。このリリースには API の変更は含まれていません。今後、重大な問題が発生しない限り、WorkManager は次のバージョンまで安定版 API として使用される予定です。このリリースにはバグの修正がいくつか含まれています。
バグの修正
- 以前にキャンセルされた子は、その親の作業が正常に完了しても実行されなくなります。b/120811767
- ロギングクラスが適切に初期化されるようになりました(テスト中にメイン表示されるようになりました)。
2018 年 12 月 18 日
Navigation
Navigation 1.0.0-alpha09
がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。
android.arch.navigation:navigation-testing
アーティファクトの開発は継続しないこととなりました。このアーティファクトが NavController
の内部テストに役立つことは実証済みですが、別のテスト戦略(navigate()
が適切に呼び出されることを確認するために NavController
インスタンスをモックするなど)を採用することを強くおすすめします。このアプローチは、AndroidDevSummit 2018 での単一アクティビティに関する講演で詳しく説明されています。また、Navigation を使用したテスト用の補足ドキュメントの作成が予定されています。
新機能
menuCategory="secondary"
を指定したMenuItem
は、NavigationUI
のメソッドとともに使用した場合に、バックスタックをポップしなくなりました。b/120104424AppBarConfiguration
を使用して、navController.navigateUp()
がfalse
を返したときに呼び出される代替のOnNavigateUpListener
インスタンスを設定できるようになりました。b/79993862、b/120690961
互換性を破る変更
argType="reference"
を指定して<argument>
を使用した場合、Navigation が参照を解析しなくなり、代わりに未加工のリソース ID そのものを提供するようになりました。b/111736515setup
メソッドに合わせて、onNavDestinationSelected()
ではデフォルトでナビゲーション グラフの開始デスティネーションにポップで戻るようになりました。バックスタックがポップされないようにするには、menuCategory="secondary"
をMenuItem
に追加してください。aosp/852869- 生成された
Args
クラスのfromBundle()
メソッドが、null 許容のBundle
ではなく、非 null のBundle
を受け取るようになりました。aosp/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
がリリースされました。このリリースには、一部の Kotlin ユーザーにとって有用な、API の軽微な変更が含まれています。
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
Navigation 1.0.0-alpha08
がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「互換性を破る変更」をご覧ください。
新機能
- デスティネーションのラベルを
NavigationUI
のメソッドで使用した場合、android:label
の{argName}
インスタンスが自動的に正しい引数で置き換えられるようになりました。b/80267266 - Navigation がサポート ライブラリ 28.0.0 に依存するようになりました。b/120293333
互換性を破る変更
OnNavigatedListener
の名前がOnDestinationChangedListener
に変更されました。b/118670572OnDestinationChangedListener
が引数のBundle
も渡すようになりました。aosp/837142app:clearTask
属性とapp:launchDocument
属性、およびそれらに関連するメソッドが削除されました。バックスタックからすべてのデスティネーションを削除するには、グラフのルートを指定してapp:popUpTo
を使用してください。b/119628354ActivityNavigator.Extras
がBuilder
パターンを使用するようになり、任意のIntent.FLAG_ACTIVITY_
フラグを設定する機能が追加されました。aosp/828140NavController.onHandleDeepLink
の名前がhandleDeepLink
に変更されました。aosp/836063- サブクラス化を想定していない多数のクラスとメソッド(
NavOptions
、NavInflater
、NavDeepLinkBuilder
、AppBarConfiguration
など)がfinal
に設定されました。aosp/835681 - 非推奨になった
NavHostFragment.setGraph()
メソッドが削除されました。aosp/835684 - 非推奨になった
NavigationUI.navigateUp(DrawerLayout, NavController)
メソッドが削除されました。aosp/835684 - フラグメント作成機能が
FragmentNavigator
に移動され、フラグメントの作成を簡単にFragmentFactory
にデリゲートできるようになりました。b/119054429 NavGraphNavigator
のコンストラクタがContext
を取得しなくなりました。aosp/835340- NavigatorProvider がインターフェースではなくクラスになりました。
getNavigatorProvider()
から返されるNavigatorProvider
の機能は変更されていません。aosp/830660 NavDestination.navigate()
を削除しました。代わりに、Navigator
でnavigate()
を呼び出してください。aosp/830663Navigator
の大幅なリファクタリングが行われ、OnNavigatorNavigatedListener
が不要になりました。代わりに、navigate
が移動先のNavDestination
を返すようになりました。Navigator
インスタンスがポップイベントをNavController
に送信できなくなりました。[戻る] ボタンの押下をインターセプトしてnavController.popBackStack()
を呼び出す場合は、OnBackPressedCallback
の使用を検討してください。aosp/833716
バグの修正
- デスティネーションが
<navigation>
要素の場合、常にpopUpTo
が動作するようになりました。b/116831650 - ネストされたグラフを使用した場合に
IllegalArgumentException
が発生する各種のバグを修正しました。b/118713731、b/113611083、b/113346925、b/113305559 <activity>
のデスティネーションのdataPattern
属性では、toString()
を呼び出して文字列以外の引数から引数を設定するようになりました。b/120161365
Safe Args
- Safe Args がシリアル化可能なオブジェクト(列挙値など)をサポートするようになりました。列挙型では、クラス名を指定せずに列挙リテラルをそのまま使用することによって、デフォルト値を設定できます(例:
app:defaultValue="READ"
)。b/111316353 - Safe Args がサポート対象のすべての型の配列をサポートするようになりました。b/111487504
- Safe Args ではリソース ディレクトリのサブフォルダが無視されるようになりました。b/117893516
- Safe Args では必要に応じて、
@Override
アノテーションが追加されるようになりました。b/117145301
2018 年 12 月 5 日
WorkManager
WorkManager 1.0.0-alpha12
がリリースされました。このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「API の互換性を破る変更」をご覧ください。このバージョンは最初のベータ版としてリリースされる可能性があります。また、alpha12
ではドキュメントが広範にわたって更新されています。
API の変更
- 新しいアーティファクトである
work-rxjava2
にRxWorker
が導入されました。これはSingle<Payload>
を必要とするListenableWorker
です。 - Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、
work-firebase
アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。 Payload
がResult
に統合されました。Result
は、3 つの具体的な実装を含む「シールクラス」になりました。このクラスは、Result.success()
(またはResult.success(Data)
)、Result.failure()
(またはResult.failure(Data)
)、Result.retry()
を介して取得できます。ListenableFuture
の結果はPayload
ではなくResult
になります。Worker
には出力のData
用の getter メソッドと setter メソッドはありません。これは互換性を破る変更です。Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit)
、Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit)
、および各種のバリアントが追加され、コンテンツ URI の低速トリガーに対するサポートが改善されました。b/119919774WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)
のバリアントが追加されました。このメソッドには API 26 が必要です。- Kotlin 拡張メソッドの
Operation.await()
とListenableFuture.await()
が追加されました。 Operation.getException()
の名前がOperation.getThrowable()
に変更されました。これは互換性を破る変更です。ContentUriTriggers
クラスとそれを参照するメソッドの一般使用ができなくなりました。これは互換性を破る変更です。- API の合理化のために、
WorkManager
、WorkContinuation
、OneTimeWorkRequest
に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数をArrays.asList(...)
でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。これは互換性を破る変更です。 WorkContinuation.combine(OneTimeWorkRequest, *)
のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存のcombine
メソッドの可読性が高まりました。これは互換性を破る変更です。
バグの修正
- Marshmallow 以前の実装における、実行中タスクのプロセス終了からの復元に関する信頼性が改善されました。
observeForever
で監視されているLiveData
が WorkManager で追跡されるようになりました。これは、Room ライブラリの修正を移植したものです。b/74477406- シリアル化されたオブジェクトがその最大サイズを超えた場合に、
Data.Builder.build()
が例外をスローするようになりました。以前は、この例外のスローは、オブジェクトを適切に処理できないバックグラウンド スレッドでのみ行われていました。 - 処理の停止とキャンセルの区別がより明確になりました。
getWorkInfoById()
はListenableWorker.onStopped()
の実行中、State
をCANCELLED
に設定してWorkInfo
を返します。 ListenableWorker
でnull
Result
がエラーとして処理されるようになりました。b/120362353- SHIELD Tablet で API 24 を実行しているときに
IllegalArgumentException
がスローされることがある問題に対し、理論的な修正が行われました。b/119484416
API の互換性を破る変更
- Firebase JobDispatcher のサポートが削除されました(サポートの終了が差し迫っていたため)。それにより、
work-firebase
アーティファクトはベータ版では更新されなくなります。今後、代替手段の追加について検討する予定です。 Payload
がResult
に統合されました。Result
は、3 つの具体的な実装を含む「シールクラス」になりました。このクラスは、Result.success()
(またはResult.success(Data)
)、Result.failure()
(またはResult.failure(Data)
)、Result.retry()
を介して取得できます。ListenableFuture
の結果はPayload
ではなくResult
になります。Worker
には出力のData
用の getter メソッドと setter メソッドはありません。- Kotlin 拡張メソッドの
Operation.await()
とListenableFuture.await()
が追加されました。 Operation.getException()
の名前をOperation.getThrowable()
に変更しました。ContentUriTriggers
クラスとそれを参照するメソッドの一般使用ができなくなりました。- API の合理化のために、
WorkManager
、WorkContinuation
、OneTimeWorkRequest
に含まれる他の可変長引数メソッドが削除されました。ビルドの問題を修正するには、既存の可変長引数をArrays.asList(...)
でラップしてください。各メソッドの単一引数のバージョンは引き続き使用できます。 WorkContinuation.combine(OneTimeWorkRequest, *)
のバリアントを削除しました。これは API を複雑なものにしていましたが、この変更により、既存のcombine
メソッドの可読性が高まりました。
2018 年 12 月 4 日
Room
Room 2.1.0-alpha03
のリリースでは、コルーチンのサポートが追加されたほか、いくつかのバグの修正が行われています。
API の変更
@Fts3
または@Fts4
の FTStokenizer
が列挙値ではなく文字列を受け取るようになりました。これにより、カスタムの tokenizer を Room で使用できるようになりました。組み込みの tokenizer は依然として、FtsOptions
で文字列定数として定義されています。b/119234881
新機能
- コルーチン: DAO メソッドを suspend 関数として使用できるようになりました。Room の suspend 関数をサポートするために、新しいアーティファクト(
room-coroutines
)がリリースされました。b/69474692 - DAO メソッドのアノテーションに
@Insert
、@Delete
、@Update
のいずれかを使用することで、戻り値の型としてListenableFuture
を使用できるようになりました。b/119418331
バグの修正
- Room が
@Entity
のignoredColumns
プロパティの列を使用して、誤ってコンストラクタを見つけようとするバグを修正しました。b/119830714 - 生成された実装において、Room が DAO メソッドのパラメータを final としてマークしないバグを修正しました。b/118015483
- Room のプロセッサが特殊記号を含むクエリのエラーを報告する際にクラッシュするバグを修正しました。b/119520136
- Room が
IN
式の引数として他のCollection
の各種実装を拒否するバグを修正しました。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()
に変更されました。これは互換性を破る変更です。- 各種の
@NonNull
アノテーションが公開 API に追加され、API の使いやすさが改善されました。 WorkManager.enqueueUniqueWork()
API が追加され、WorkContinuation
を作成せずに一意のOneTimeWorkRequest
をキューに登録できるようになりました。WorkManager
のenqueue
メソッドとcancel
メソッドのすべてのバリアントが新しいOperation
型を返すようになりました。これは互換性を破る変更です。enqueue
のすべてのバリアントがWorkRequest
の可変長引数を受け取らなくなりました。これは互換性を破る変更です。 代わりにコレクションを使用してください。Arrays.asList()
を使用すると、既存のコードを変更できます。この変更は、API サーフェスとメソッドの数を減らすことを目的としています。- 各プロセスで
WorkManager
を複数回initialize
しようとすると、IllegalStateException
が発生するようになりました。これは互換性を破る変更です。
バグの修正
work-runtime-ktx
アーティファクトのWorkRequest.Builder
でListenableWorker
が使用されるようになりました。b/117666259PeriodicWork
の次回の実行時間が将来の時間に設定されるようになりました。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
のenqueue
メソッドとcancel
メソッドのすべてのバリアントが新しいOperation
型を返すようになりました。enqueue
のすべてのバリアントがWorkRequest
の可変長引数を受け取らなくなりました。- 各プロセスで
WorkManager
を複数回initialize
しようとすると、IllegalStateException
が発生するようになりました。
2018 年 11 月 1 日
Paging
Paging 2.1.0-beta01
がリリースされました。2.1.0-alpha01
からの変更はありません。
2018 年 10 月 30 日
Room
Room 2.1.0-alpha02
のリリースでは、バグの修正が行われ、新機能も追加されています。
新機能
@Relation
の@DatabaseView
を参照できるようになりました。b/117680932
バグの修正
- Rx の戻り値の型を使用して登録や破棄を行う場合に、Room がディスク I/O をメインスレッドで実行するバグを修正しました。b/117201279
- Kotlin エンティティ クラスのフィールドに適した型コンバータを Room が見つけられないバグを修正しました。b/111404868
- 引数のない Kotlin デフォルト メソッドを含む
DAO
インターフェースの実装に適さないコードが Room によって生成されるバグを修正しました。b/117527454 - Room の SQLite 文法パーサーを更新し、ビルド時間が長引く原因となるパフォーマンスの問題を修正しました。b/117401230
2018 年 10 月 29 日
Navigation
Navigation 1.0.0-alpha07
のリリースでは、バグの修正と API の変更が行われています。
新機能
- 新しい AppBarConfiguration クラスを使用して、どのデスティネーションが最上位のデスティネーションと見なされるかをカスタマイズできるようになりました。詳しくは、更新されたドキュメントをご覧ください。b/117333663
- グラフの最初のデスティネーションに引数を渡せるようになりました。b/110300470
- ディープリンクが、ピリオド、ハイフン、プラス記号を含むカスタム形式をサポートするようになりました。b/112806402
互換性を破る変更
navigation-testing-ktx
モジュールがnavigation-testing artifact
に組み込まれ、公開されなくなりました。navigation-testing
アーティファクトが Kotlin 標準ライブラリに依存するようになりました。Kotlin の規則との整合性を強化するために API が変更されましたが、Java で作成されたテストでは API を引き続き使用できます。- メタデータ マニフェストで登録されたナビゲーション グラフがサポートされなくなりました。b/118355937
- アクションを <activity> のデスティネーションにアタッチできなくなりました。aosp/785539
バグの修正
- ディープリンクがクエリ パラメータを正しく解析できるようになりました。b/110057514
- アクティビティのデスティネーションが開始と終了のすべてのアニメーションに正しく適用されるようになりました。b/117145284
- カスタム ナビゲータを使用している場合に構成の変更後に発生するクラッシュを解決しました。b/110763345
Safe Args
- Safe Args は Android Gradle プラグイン 3.2.1 に依存するようになりました。b/113167627
- 内部クラス用の Directions を生成できるようになりました。b/117407555
- <include> グラフへの Directions の生成に関する問題を修正しました。b/116542123
2018 年 10 月 12 日
Paging
Paging 2.1.0-alpha01
のリリースでは、2 つの重要な機能(ページ削除機能と、すべてのアーティファクトを対象とした 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 のオプションとして追加されました。- PagedList が交換されるタイミングをリッスンするための
AsyncPagedListDiffer.addPagedListListener()
が追加されました。b/111698609 - 新旧のリストを渡す
PagedListAdapter.onCurrentListChanged()
のバリアントが追加され、以前のバリアントは非推奨になりました。 PagedListAdapter/AsyncPagedListDiffer.submitList()
のバリアントが追加されました。このバリアントは、比較した後に PagedList を表示する場合にトリガーされる追加のコールバックを受け取ります。これにより、PagedList の交換を他の UI の更新と同期できるようになりました。b/73781068PagedList.getLoadedCount()
が追加され、メモリ内のアイテム数を把握できるようになりました。プレースホルダが無効になっている場合、戻り値は常に.size()
と等しくなります。
バグの修正
- リストを再利用する場合に比較を実行するときの競合状態を修正しました。b/111591017
- インデックスが無効な場合、
PagedList.loadAround()
がIndexOutOfBoundsException
をスローするようになりました。以前は、他の不明確な例外により、クラッシュが発生することがありました。 - データの変更がなく、初期読み込みサイズが極めて小さい場合に、読み込みがそれ以上行われなくなる問題を修正しました。b/113122599
2018 年 10 月 11 日
WorkManager
WorkManager 1.0.0-alpha10
のリリースでは、デベロッパーが管理する非同期タスクのサポートが追加されています。また、このリリースには API の互換性を破る変更が含まれています。詳しくは、下記の「API の互換性を破る変更」をご覧ください。
Google は、WorkManager がアルファ版の最終段階に入ると予想しています。また、ベータ版では安定版 API になると期待しています。公開バグトラッカーでフィードバックをお送りください。
API の変更
- デフォルトの
Worker
コンストラクタをはじめ、以前にdeprecated
したすべてのメソッドとクラスが削除されました。これは API の互換性を破る変更です。 NonBlockingWorker
の名前がListenableWorker
に変更されました。この公開クラスは非表示が解除され、使用できる状態になっています。ListenableWorker
は、メインスレッドで呼び出される抽象メソッドの 1 つであるListenableFuture<Payload> onStartWork()
へのアクセスを提供します。タスクを開始して非同期で処理できるようにするのはデベロッパーの責任です。タスクが完了したら、ListenableFuture
を適宜更新する必要があります。ListenableFuture
のリファレンス実装はalpha02
のFutures
パッケージで提供されます(下記のWorkManager
のセクションをご覧ください)。Worker
はListenableWorker
を拡張したもので、以前と同じように動作します(Result doWork()
抽象メソッドを使用)。Worker
の一部のメソッドとメンバーがListenableWorker
に移動されました。- Google は、Kotlin のコルーチン(安定版がリリースされ次第)と RxJava2 を使用する、
ListenableWorker
のリファレンス実装をまもなく提供します。
- インターフェース(
WorkerFactory
)と具体的な実装(DefaultWorkerFactory
)が抽象クラス(WorkerFactory
)に統合されました。この実装により、ユーザーが作成したすべてのWorkerFactory
インスタンスに対する最後の手段として、リフレクションに基づくデフォルトの動作が呼び出されるようになります。これは互換性を破る変更です。 WorkManager.synchronous()
、WorkContinuation.synchronous()
、および関連するすべてのメソッドが削除されました。API の各種メソッドの戻り値の型としてListenableFuture<Void>
が追加されました。これは API の互換性を破る変更です。ListenableFuture
を使用することで、取得と監視を同期させて行えるようになりました。たとえば、以前はvoid
を返していたWorkManager.enqueue()
は、ListenableFuture<Void>
を返すようになりました。処理の完了後にListenableFuture.addListener(Runnable, Executor)
またはListenableFuture.get()
を呼び出してコードを実行できます。ListenableFuture
では処理が成功か失敗かを判断できません。判断できるのは、処理が終了したことだけです。処理が成功か失敗かを確認するには、WorkManager メソッドを連結する必要があります。- これらのオブジェクトでは、
cancel()
の呼び出しは無視されます。その理由は、処理と、結果として生じる作業のどちらをキャンセルするかの判断が難しいためです。これはFuture
コントラクト内で行われます。 getStatus*
同期メソッドと同等の機能を引き続き提供できるようにするために、Google はListenableFuture
のバリアントを提供し、LiveData
を返す既存のメソッドの名前を「LiveData」を明示的に含むものに変更しました(例:getStatusesByIdLiveData(UUID)
)。これは API の互換性を破る変更です。
バグの修正
- 重複する
androidx-annotations.pro
ファイルに関する alpha09 からの既知の問題を修正しました。Gradle ファイルからexclude 'META-INF/proguard/androidx-annotations.pro'
を削除することで、以前のリリースノートの回避策を削除できます。 - ProGuard の設定が追加され、新しい
Worker
コンストラクタを保持できるようになりました。b/116296569 - 処理が
REPLACE
される競合状態での潜在的なNullPointerException
を修正しました。b/116253486、b/116677275 WorkContinuation.combine()
が、2 つ以上ではなく 1 つ以上のWorkContinuation
を受け取るようになりました。b/117266752
API の互換性を破る変更
- デフォルトの
Worker
コンストラクタをはじめ、以前にdeprecated
したすべてのメソッドとクラスが削除されました。 - インターフェース(
WorkerFactory
)と具体的な実装(DefaultWorkerFactory
)が抽象クラス(WorkerFactory
)に統合されました。 WorkManager.synchronous()
とWorkContinuation.synchronous()
が削除されました。WorkManager.getStatus*()
メソッドがListenableFuture
を返すようになりました。また、WorkManager.getStatus*LiveData()
がLiveData
を返すようになりました。
Futures
Futures 1.0.0-alpha02
がリリースされました。
API の変更
- デベロッパーは、
ListenableFuture
の具体的な軽量の実装として、ResolvableFuture
とAbstractResolvableFuture
を使用できるようになりました。
2018 年 10 月 8 日
Room
Room 2.1.0-alpha01
がリリースされました。
新機能
- FTS: FTS3 または FTS4 マッピング テーブルを含むエンティティが Room でサポートされるようになりました。
@Entity
アノテーションが付与されたクラスでは、@Fts3
または@Fts4
のアノテーションを追加で使用することにより、全文検索のマッピング テーブルを含むクラスを宣言できるようになりました。アノテーションのメソッドを介して FTS オプションを使用することで、さらにカスタマイズできるようになります。b/62356416 - ビュー: Room で @DatabaseView アノテーションを使用することにより、クラスをストアドクエリ(ビューとも呼ばれます)として宣言できるようになりました。b/67033276
- AutoValue: Room で、AutoValue アノテーションが付与されたクラスをエンティティや POJO として宣言できるようになりました。AutoValue アノテーションが付与されたクラスの抽象メソッドで、Room のアノテーションである
@PrimaryKey
、@ColumnInfo
、@Embedded
、@Relation
を宣言できるようになりました。これらのアノテーションは@CopyAnnotations
とともに使用して、Room が正しく認識できるようにする必要もあります。b/62408420 - Rx の戻り値の型の追加サポート: DAO メソッドのアノテーションに
@Insert
、@Delete
、@Update
のいずれかを使用することで、Rx の戻り値の型としてCompletable
、Single<T>
、Maybe<T>
を使用できるようになりました。b/63317956 @Relation
が付与された不変の型: Room では従来、@Relation
アノテーションが付与されたフィールドは設定できるものである必要がありましたが、それらのフィールドをコンストラクタのパラメータとして指定できるようになりました。enableMultiInstanceInvalidation
:RoomDatabase.Builder
の新しい API です。この API では、1 つのデータベース ファイルで RoomDatabase の複数のインスタンスを無効にできます。この複数インスタンスの無効化メカニズムは、プロセスが複数にわたる場合でも機能します。b/62334005fallbackToDestructiveMigrationOnDowngrade
:RoomDatabase.Builder
の新しい API です。この API は、ダウングレードが発生した場合にデータベースを自動的に再作成します。b/110416954ignoredColumns
:@Entity
アノテーションの新しい API です。この API を使用すると、無視するフィールドをフィールド名のリストで指定できます。エンティティで継承されたフィールドを無視する場合に便利です。b/63522075
API / 動作の変更
RoomDatabase
のmCallback
とmDatabase
が@Deprecated
になりました。これらは Room の次のメジャー バージョンで削除される予定です。b/76109329
バグの修正
- 初期化中にデータベースが破損した場合または不正な移行が行われた場合に、Room を正常に復元できない問題を修正しました。b/111504749、b/111519144
- データクラスに含まれる Kotlin の基本コンストラクタが Room で適切に使用されるようになり、フィールドを
vars
として宣言する必要がなくなりました。b/105769985
2018 年 10 月 1 日
2.0.0
がリリースされました。2.0.0-rc01
からの変更はありません。
Paging 2.0.0
のリリースでは、バグが 1 件修正されています。
Paging
バグの修正
PositionalDataSource
とプレースホルダを使用して非常に高速にスクロールした場合にクラッシュが発生する可能性がある問題を修正しました。b/114635383
2018 年 9 月 21 日
Lifecycle 2.0.0
のリリースでは、ViewModel に関する 2.0.0-rc01
のバグが 1 件修正されています。
Lifecycle
バグの修正
- コンストラクタを誤って削除する ViewModel ProGuard ルールを修正しました。b/112230489
2018 年 9 月 20 日
Navigation
Navigation 1.0.0-alpha06
のリリースでは、バグの修正と API の変更が行われています。
新機能
- フラグメントとアクティビティの共有要素の遷移のデスティネーションがサポートされるようになりました(b/79665225)。詳細については、Navigation アーキテクチャ コンポーネントを使用したナビゲーションの実装に関するガイドをご覧ください。
NavigationView
のアイテムを選択した場合、下部シートを含むすべてが閉じるようになりました。b/112158843
API の変更
- 互換性を破る変更: ナビゲータの
navigate()
メソッドがNavigator.Extras
パラメータを受け取るようになりました。 - NavController の
getGraph()
メソッドがNonNull
になりました。b/112243286
バグの修正
NavigationUI.setupWithNavController()
を各デスティネーションからビューとともに使用する場合、ビューがリークしなくなりました。b/111961977- ナビゲータの
onSaveState()
が一度だけ呼び出されるようになりました。b/112627079
Safe Args
- ナビゲーション先の Directions クラスによってその親の Directions クラス(存在する場合)が拡張されるようになりました。b/79871405
- Directions クラスと Args クラスに、便利な
toString()
の実装が追加されました。b/111843389
2018 年 9 月 19 日
WorkManager
WorkManager 1.0.0-alpha09
のリリースでは、バグの修正、インフラストラクチャの更新、API の変更が行われています。
既知の問題
「More than one file was found with OS independent path '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 jobs」というエラー メッセージが表示される場合に必要な別の修正が追加されました。b/115560696
- 競合状態が原因の外部キー制約エラーに関する修正がいくつか追加されました。b/114705286
ConstraintTrackingWorker.onStopped(boolean)
の呼び出しが、基になるWorker
にデリゲートされました。b/114125093- Firebase JobDispatcher に対する適切な最小バックオフ遅延が適用されました。b/113304626
- ライブラリ内部のスレッドの保証が改善されました。
- 内部での
LiveData
の重複排除に関する潜在的な問題を修正しました。
API の変更
WorkerFactory
をWorkManager.Configuration
の一部として指定することにより、実行時に独自のWorker
インスタンスを作成できるようになりました。代替ファクトリはDefaultWorkerFactory
です。これは、WorkManager の旧バージョンの動作と一致します。Worker
とNonBlockingWorker
のデフォルト コンストラクタを非推奨にしました。新しいコンストラクタ(Worker(Context, WorkerParameters)
)を使用し、super(Context, WorkerParameters)
を呼び出してください。WorkManager の将来のバージョンでデフォルト コンストラクタが削除される予定です。
- Google 社内で新しい
ListenableFuture
アーティファクトの使用が開始されました(Guava 依存関係はなし)。今後のリリースで、ListenableFutures が API に導入される予定です。この変更により、NonBlockingWorker
が最終的に再表示されます。 TestDriver.setInitialDelayMet(UUID)
とTestDriver.setPeriodDelayMet(UUID)
を使用してTestDriver
の時限タスクをトリガーする機能が追加されました。b/113360060
互換性を破る変更
Worker
とNonBlockingWorker
のデフォルト コンストラクタを非推奨にしました。できるだけ早く新しいコンストラクタに移行してください。将来のバージョンでデフォルト コンストラクタが削除される予定です。
2018 年 8 月 27 日
WorkManager
WorkManager 1.0.0-alpha08
のリリースでは、バグの修正が行われています。
バグの修正
- WorkManager コンポーネントがダイレクト ブート非対応として明示的にラベル付けされました。そのため、ダイレクト ブート中は、WorkManager コンポーネントは起動しません。将来、ダイレクト ブートに対応したバージョンの WorkManager が提供される予定です。b/112665532
- 再試行されたタスクが実行されなくなる問題を修正しました。b/112604021
- たびたび定期タスクが実行されなくなる問題を修正しました(上の問題に関連)。b/112859683
- アプリプロセスがすでに実行されている場合、バックオフ ポリシーが優先されるようになりました。
- 制限が 10 KB であることを示すように、
Data
の例外メッセージを修正しました。 JobScheduler
プロセスの完了の遅延に対処するために、Configuration.setMaxSchedulerLimit(int)
の最大値を 50 に下げました。b/112817355
2018 年 8 月 16 日
WorkManager
WorkManager 1.0.0-alpha07
のリリースではバグの修正と API の軽微な変更が行われています。
バグの修正
- 負の制限値が指定された SQL クエリが結果を際限なく返す可能性がある問題を修正しました。
- 作業の実行が終了したときに、他のスケジューラに含まれているその作業の保留中のすべてのコピーが正しくキャンセルされるようになりました。この問題は、
JobScheduler
のジョブ数の制限超過の原因となっていました。b/111569265 ConstraintTracker
のConcurrentModificationException
を修正しました。b/112272753Data.getBooleanArray(String)
とData.getIntArray(String)
の戻り値の型のアノテーションを、@NonNull
ではなく@Nullable
に変更しました。b/112275229
API の変更
Worker
が新しいクラスNonBlockingWorker
を拡張できるようになりました。この変更による現在の処理への影響はありません。NonBlockingWorker
は将来、カスタムのスレッド ソリューションに完全に対応したエンティティになる予定です。Data.getBooleanArray(String)
とData.getIntArray(String)
の戻り値の型のアノテーションを、@NonNull
ではなく@Nullable
に変更しました。b/112275229- Kotlin 拡張機能:
Map.toWorkData()
のサポートを終了し、トップレベルのworkDataOf(vararg Pair<String, Any?>)
を追加することにより、既存の API との整合性を強化しました。
2018 年 8 月 10 日
Navigation
Navigation 1.0.0-alpha05
のリリースでは、バグの修正が行われています。
バグの修正
- 不正なバックスタック動作を引き起こすバグを修正しました。b/111907708
- 生成された Args クラスの
equals()
のバグを修正しました。b/111450897 - Safe Args のビルドエラーを修正しました。b/109409713
- リソース ID から Java 名への変換を修正しました。b/111602491
- Safe Args プラグインの null 可能性に関するエラー メッセージを修正しました。
- 不足している null 可能性アノテーションを追加しました。
2018 年 8 月 6 日
Lifecycle、Room、Paging のリリース バージョン 2.0.0-rc01
の AndroidX バージョン。アーティファクトはすべて 2.0.0-beta01
から変更されていません。
2018 年 8 月 1 日
WorkManager
WorkManager 1.0.0-alpha06
のリリースでは、バグの修正が行われています。
バグの修正
- 作業のスケジュール設定時のデータベース ロックを防止できるようになりました。b/111801342
- Doze モード時に
PeriodicWork
がスケジュールどおりに実行されないバグを修正しました。b/111469837 WorkManager
のクラッシュを引き起こす、制約を追跡する際の競合状態を修正しました。googlecodelabs/android-workmanager/issues/56WorkRequest.Builder#build()
を使用する場合に一意のWorkRequest
を作成できるようになりました。b/111408337RescheduleReceiver
は、それを必要とするWorkRequest
が存在する場合にのみ使用できるようになりました。b/111765853
2018 年 7 月 24 日
WorkManager
WorkManager 1.0.0-alpha05
のリリースでは、重要なバグの修正とログの変更が行われています。
API の変更
WorkManager.getInstance()
のアノテーションに、@Nullable
ではなく@NonNull
が使用されるようになりました。その代わり、手動で初期化する場合にシングルトンが適切に初期化されないと、このメソッドはIllegalStateException
をスローします。これは API の互換性を破る変更です。- 新しい 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- デバイスの Doze の後に
PeriodicWorkRequest
が正しく実行されない問題を修正しました。b/111469837 - Firebase JobDispatcher の使用時に初期遅延が発生する問題を修正しました。b/111141023
- 潜在的な競合状態とタイミングに関するいくつかの問題を修正しました。
- 不要になった
BroadcastReceiver
が適切に解放されるようになりました。 - アプリを強制終了した後に再起動する場合のスケジュール変更のパフォーマンスを最適化しました。
- 特定の
WorkRequest
をキューに登録する前後にTestScheduler.setAllConstraintsMet(UUID)
を呼び出せるようになりました。b/111238024
互換性を破る変更
WorkManager.getInstance()
のアノテーションに、@Nullable
ではなく@NonNull
が使用されるようになりました。Data.getString()
のシグネチャが変更され、デフォルト値を取得しなくなりました(暗黙的にnull
)。- 内部用にのみ必要な一部のメソッドが
@hide
としてマークされました。これには、Constraints
コンストラクタ、Data.toByteArray()
、Data.fromByteArray(byte[])
が含まれます。
2018 年 7 月 19 日
Navigation
Navigation 1.0.0-alpha04
と関連する Safe Args Gradle プラグインで、API の変更、動作の変更、バグの修正が多数行われています。
API / 動作の変更
- NavHostFragment では常に、現在のフラグメントがメインのナビゲーション フラグメントとして設定され、外部の NavController がポップされる前に子フラグメント マネージャーがポップされるようになります。b/111345778
Safe Args
- 互換性を破る変更:
app:type
が、他のライブラリ(ConstraintLayout 2.0.0-alpha1 など)との競合を避けるために、app:argType
に変更されました。b/111110548 - Safe Args からのエラー メッセージをクリックできるようになりました。b/111534438
- Args クラスでは、
NonNull
属性が実際に null ではないことが確認されるようになりました。b/111451769 - NavDirections と Args によって生成されたクラスに
NonNull
アノテーションが追加されました。b/111455455、b/111455456
バグの修正
- フラグメントの宛先にディープリンクした後に発生する、システムの [戻る] ボタンに関する問題を修正しました。b/111515685
2018 年 7 月 12 日
Navigation
Navigation 1.0.0-alpha03
と関連する Safe Args Gradle プラグインで、API の変更、動作の変更、バグの修正が多数行われています。
API / 動作の変更
- ツールバー用の NavigationUI.setupWithNavController メソッドが追加されました。b/109868820
- CollapsingToolbarLayout 用の NavigationUI.setupWithNavController メソッドが追加されました。b/110887183
- バックスタックが空の場合、または特定のデスティネーション ID がバックスタック内にない場合に、popBackStack() から false が返されるようになりました。b/110893637
- FragmentManager が状態を保存した後に、FragmentNavigator においてナビゲーション操作が無視されるようになったことで、「Can not perform this action after onSaveInstanceState」例外を回避できるようになりました。b/110987825
Safe Args
- 互換性を破る変更: アクション名と引数名に含まれる英数字以外の文字が、それぞれの NavDirections メソッドの名前でキャメルケースに置き換えられます。
- 例:
DemoController.index
はsetDemoControllerIndex
になります。b/79995048 - 例:
action_show_settings
はactionShowSettings
になります。b/79642240
- 例:
- 互換性を破る変更: デフォルトでは、引数が null ではないと見なされるようになりました。文字列と Parcelable の引数に null 値を許可するには、
app:nullable="true"
を追加します。b/79642307 - 「123L」の形式で defaultValues を指定して、
app:type="long"
を使用できるようになりました。b/79563966 - Parcelable の引数がサポートされるようになりました(
app:type
には完全修飾クラス名を使用します)。サポートされる唯一のデフォルト値は"@null"
です。b/79563966 - Args クラスに
equals()
とhashCode()
が実装されました。b/79642246 - Safe Args プラグインをライブラリ プロジェクトに適用できるようになりました。b/80036553
- Safe Args プラグインを機能プロジェクトに適用できるようになりました。b/110011752
バグの修正
- フラグメントのライフサイクル メソッドでのナビゲーションの際に発生する問題を修正しました。b/109916080
- ネストされたグラフを介して複数回ナビゲーションする際に発生する問題を修正しました。b/110178671
- グラフで最初のデスティネーションを指定して
setPopUpTo
を使用する場合に発生する問題を修正しました。b/109909461 app:defaultValue
のすべての値が文字列として渡されていた問題を修正しました。b/110710788- Android Gradle プラグイン 3.2 Beta 01 にバンドルされている aapt2 で、Navigation XML ファイル内のすべての
android:name
属性に関する保持ルールが追加されました。b/79874119 - デフォルトの FragmentNavigator を置き換える際に発生するメモリリークを修正しました。b/110900142
2018 年 7 月 2 日
Lifecycle、Room、Paging のリリース バージョン 2.0.0-beta01
の AndroidX バージョン。
Lifecycle
バグの修正
- 実装のみを保持し、サブインターフェースは保持しないように LifecycleObserver ProGuard ルールを修正しました。b/71389427
- 難読化と圧縮を許可するように ViewModel ProGuard ルールを修正しました。
Room
API / 動作の変更
RoomDatabase.Builder.setQueryExecutor()
が追加され、クエリの実行場所のカスタマイズが可能になりました。- RxJava2
Observable
のサポートが追加されました。 - 生成された DAO とデータベースの実装は今回が最終版となります。
バグの修正
- 「cannot find getter for field」エラーにクラス / フィールド名が指定されるようになりました。b/73334503
- 旧バージョンの Room との RoomOpenHelper の下位互換性を修正しました。b/110197391
Paging
バグの修正
- 一部の追加のケース(プレースホルダが無効化されている、PositionalDataSource)でコンテンツが表示されない問題を修正しました。b/80149146
- (
1.0.1
ですでにリリース済み)PagedListAdapter
とAsyncPagedListDiffer
が移動イベントを通知できずにクラッシュする問題を修正しました。b/110711937
2018 年 6 月 26 日
Paging
Paging 1.0.1
のリリースでは、runtime
のバグが 1 件修正されています。安定性を得るために、1.0.1
を使用することを強くおすすめします。Paging RxJava2 1.0.1
もリリースされています。これは 1.0.0-rc1
とまったく同じです。
バグの修正
PagedListAdapter
とAsyncPagedListDiffer
が移動イベントを通知できずにクラッシュする問題を修正しました。b/110711937
WorkManager
WorkManager 1.0.0-alpha04
がリリースされました。
バグの修正
AlarmManager
ベースの実装を使用する場合、PeriodicWorkRequest
のスケジュールが正しく変更されるようになりました。強制停止または再起動の後ですべてのワーカーのスケジュールを変更した場合に ANR が発生する可能性がある問題を修正しました。b/110507716
null 可能性のアノテーションが各種の WorkManager API に追加されました。b/110344065
Worker の実行時に発生する捕捉されない例外がログに記録されるようになりました。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/109827628、b/109758949、b/80230748
WorkRequest
をキューに再登録するとクラッシュする問題を修正しました。b/109572353work-runtime-ktx
の依存関係を利用する場合に Kotlin コンパイラで警告が出力される問題を修正しました。WorkManager で
Room
バージョン1.1.1-rc1
が使用されるようになりました。
API の変更
WorkContinuation.getStatuses()
の同期バージョンであるgetStatusesSync()
を追加しました。ユーザーが開始したキャンセルと OS がリクエストした一時的な停止を区別する機能が
Worker
に追加されました。Worker.isStopped()
は、どのような種類の停止がリクエストされた場合でもtrue
を返します。Worker.isCancelled()
は、処理が明示的にキャンセルされた場合にtrue
を返します。b/79632247API 28 での JobParameters#getNetwork() のサポートが追加されました。これは
Worker.getNetwork()
を介して公開されます。Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit)
が追加されました。これにより、JobScheduler
またはAlarmManager
に送信可能なジョブの数を適用できるようになります。これは、使用可能なJobScheduler
スロットをWorkManager
がすべて取得するのを防ぐのに役立ちます。Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId)
が追加されました。これは、WorkManager
が安全に使用できるJobScheduler
ジョブ ID の範囲を定義するのに役立ちます。b/79996760Worker.getRunAttemptCount()
が特定のWorker
の現在の実行数を返すようになりました。b/79716516WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork)
を使用することで、一意のPeriodicWorkRequest
をキューに登録できるようになりました。b/79600647WorkManager.cancelAllWork()
がすべてのWorker
をキャンセルするようになりました。WorkManager
に依存するライブラリは、このメソッドがWorkManager.getLastCancelAllTimeMillis()
を使用して前回呼び出されたタイミングを照会することで、内部状態をさらにクリーンアップすることができます。完了したジョブを内部データベースから削除するための
WorkManager.pruneWork()
が追加されました。b/79950952、b/109710758
動作の変更
- すべての
WorkRequest
で使用できる暗黙的なタグが追加されました。このタグはWorker
の完全修飾クラス名です。これにより、tag
なしで、またはid
を使用できない場合でも、WorkRequest
を削除できます。b/109572351
互換性を破る変更
Worker.WorkerResult
の名前をWorker.Result
に変更しました。Worker.onStopped
にisCancelled
パラメータが追加されました。このパラメータは、Worker
が明示的にキャンセルされた場合にtrue
に設定されます。
2018 年 6 月 7 日
Navigation 1.0.0-alpha02
がリリースされました。
Navigation
動作の変更
FragmentNavigator
はsetReorderingAllowed(true)
を使用するようになりました。b/109826220Navigation で、ディープリンク URL から解析された引数が URL デコードされるようになりました。b/79982454
バグの修正
フラグメントのライフサイクル メソッドから Navigation を呼び出す場合に発生する
IllegalStateException
を修正しました。b/79632233Navigation がサポート ライブラリ 27.1.1 に依存するようになり、アニメーションを使用する場合のちらつきが修正されました。b/80160903
defaultNavHost="true" を子フラグメントとして使用する場合に発生する
IllegalArgumentException
を修正しました。b/79656847NavDeepLinkBuilder を使用する場合に発生する
StackOverflowError
を修正しました。b/109653065ネストされたグラフに戻る際に発生する
IllegalArgumentException
を修正しました。b/80453447launchSingleTop
を使用する場合にフラグメントが重なる問題を修正しました。b/79407969Navigation で、ネストされたグラフ用に適切な合成バックスタックを作成できるようになりました。b/79734195
NavigationUI で、ネストされたグラフを
MenuItem
として使用する場合に適切なアイテムをハイライト表示できるようになりました。b/109675998
API の変更
アクションの
clearTask
属性と、NavOptions
の関連する API が非推奨になりました。b/80338878アクションの
launchDocument
属性と、NavOptions
の関連する API のサポートが終了しました。b/109806636
2018 年 5 月 24 日
WorkManager 1.0.0-alpha02
がリリースされました。
WorkManager
バグの修正
State.isFinished()
のNullPointerException
を修正しました。b/79550068Application.onCreate()
でWorker
のスケジュール変更を引き起こしていた問題を修正しました。b/79660657OS で許可されるよりも多くの処理のスケジュールを設定できる問題を修正しました。b/79497378
Worker
に関連付けられている wake lock のクリーンアップをバックグラウンド スレッドに移動しました。AlarmManager
の実装で、保留中のすべての処理が完了したときに適切にクリーンアップされるようになりました。英語地域以外に影響を及ぼしていたクリーンアップの SQL クエリを修正しました。b/80065360
Data
のfloat
に対するサポートが追加されました。b/79443878Data.Builder.putAll()
がBuilder
のインスタンスを返すようになりました。b/79699162ドキュメントに Javadoc に関する記述を増やし、修正を行いました。b/79691663
API の変更
Worker
が停止されている状態に対応できるようになりました。Worker.isStopped()
を使用すると、Worker
が停止されているかどうかを確認できます。また、Worker.onStopped()
を使用すると、軽量のクリーンアップ処理を実行できます。Worker.getTags()
API が、Worker
に関連付けられているタグのSet
を返すようになりました。javax.time.Duration
のオーバーロードが、期間とTimeUnit
の組み合わせを取得する API 用に追加されました。これは@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.0
ではなく 1.1.1-rc1
を使用することを強くおすすめします。
Room
Room で移行後の初期化が適切に処理されないバグを修正しました。b/79362399
Paging
Paging rxjava2
がリリース候補になります。初期のアルファ版からの変更はありません。
2018 年 5 月 8 日
Paging 1.0、Navigation と WorkManager のアルファ版、Room 1.1、AndroidX
Paging 1.0.0
、Room 1.1.0
、さらに 2 つの新しいアーキテクチャ コンポーネント(Navigation と WorkManager)のアルファ版がリリースされました。
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」コンポーネント)のすべてに、AndroidX のアルファ版リリースの一部として追加された Kotlin 拡張機能ライブラリが含まれています。また、Navigation と WorkManager には -ktx モジュールも含まれています。これらの各拡張機能モジュールについては、コンポーネントの追加をご覧ください。
2018 年 5 月 2 日
- Room 1.1.0 リリース候補
- Room
1.1.0-rc1
がリリースされました。
バグの修正
- Room に Kotlin
1.2.40
との互換性が備わりました。b/78328708
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 は、リリース候補版に進む前の少しの間、ベータ版が提供される予定です。
Paging 1.0
でのこれ以上の API の変更は予定していません。API の変更に対する制約が非常に大きくなっています。
Paging に対するアルファ版 RxJava2 のサポートが、独立したオプションのモジュールとしてリリースされました(android.arch.paging:rxjava2:1.0.0-alpha1
)。安定するまで、一時的に独立してバージョニングされる予定です。
この新しいライブラリには LivePagedListBuilder
に代わる RxJava2 が用意されており、Observable
と Flowable
を作成し、Executor
ではなく Scheduler
を取得できます。
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.Builder
、LivePagedListBuilder
)setMainThreadExecutor()
の名前がsetNotifyExecutor()
に変更されました(PagedList.Builder
)
PagedList.mCallbacks
メンバーを非公開に修正しました。
バグの修正
LivePagedListBuilder
は、Arch コンポーネントの IO スレッドプールではなく、指定されたエグゼキュータで、最初のPagedList
の読み込みをトリガーするようになりました。内部の
DataSource
ラッパー(DataSource.map
の実装と、プレースホルダが無効化されたPositionalDataSource
の読み込みの実装に使用される)での無効な動作を修正しました。b/77237534
Room
バグの修正
Room の Rx の
Single
とMaybe
の実装における重大なバグを修正しました。このバグは、クエリのリサイクルを早すぎるタイミングで実行し、返されたSingle
インスタンスまたはMaybe
インスタンスに複数のオブザーバーを追加した場合に問題を引き起こしていました。 b/76031240RoomDatabase.clearAllTables がトランザクション内で呼び出された場合、データベースに
VACUUM
を実行しなくなりました。b/77235565
2018 年 3 月 21 日
Room 1.1.0-beta1
、Paging 1.0.0-alpha7
、Lifecycles 1.1.1
がリリースされました。
Room
API の変更
- API レビューのフィードバックに基づき、
@RawQuery
ではString
をクエリ パラメータとして渡すことができなくなりました。SupportSQLiteQuery を使用する必要があります(引数をサポートする SupportSQLiteQuery のインスタンスを簡単に作成するには SimpleSQLiteQuery についてご確認ください)。 - RoomDatabase.Builder の fallbackToDestructiveMigrationFrom メソッドで、
vararg Integer
の代わりにvararg int
を使用できるようになりました。
バグの修正
WAL チェックポイントを設定し、データベースの
VACUUM
を実行することで、RoomDatabase.clearAllTables がオペレーティング システムにスペースを返すようになりました。@RawQuery
は、Pojo がEmbedded
フィールドまたはRelation
を介してエンティティを参照する限り、observedEntities
プロパティの Pojo をすべて受け入れるようになりました。b/74041772Paging: Room の DataSource の実装で、マルチテーブルの依存関係(関係、結合など)を適切に処理できるようになりました。以前はこの依存関係により、新しい結果をトリガーできず、コンパイルを実行できないこともありました。 b/74128314
Lifecycle
1 つの小規模な変更のみ: android.arch.core.util.Function
が arch:runtime
から arch:common
に移動されました。これにより、(下記の paging:common
のような)ランタイムの依存関係がなくてもこのメソッドを使用できるようになりました。
lifecycle:common
は lifecycle:runtime
の依存関係であるため、この変更による lifecycle:runtime
への直接的な影響はありません。影響を受けるのは、Paging と同様に、lifecycle:common
に直接依存するモジュールだけです。
Paging
Paging 1.0.0-alpha7
が Lifecycle 1.1.1
とともにリリースされました。上記のとおり、Paging alpha7 は Function
クラスの移動に依存するため、lifecycle:runtime
の依存関係を android.arch.lifecycle:runtime:1.1.1
に更新する必要があります。
Paging alpha7
は、Paging がベータ版になる前の最終リリースになる予定です。
API の変更
DataSource.LoadParams
オブジェクトにパブリック コンストラクタが追加され、DataSource.LoadCallback
は抽象オブジェクトになりました。これにより、DataSource
をラップする、またはモック コールバックを使用してDataSource
を直接テストすることができます。 b/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
の最後のアルファ版リリースになる予定です。
API の変更
InvalidationTracker の
addObserver
メソッドとremoveObserver
メソッドが同期するようになりました。UI 以外のスレッドではこれらのメソッドを呼び出す必要があります。これにより、テーブルを監視しながら一部の競合状態を防止できます。RoomDatabase クラスに新しい
clearAllTables()
メソッドが追加されました。このメソッドは、テーブルの内容をすべて切り捨てます。b/63807999クエリ パラメータの数を返す
getArgCount()
メソッドがSupportSQLiteQuery
に追加されました。b/67038952
バグの修正
@RawQuery
が Paging のクエリ用に適切にサポートされるようになりました。b/72600425生成された
Dao
クラスの名前が Room によって適切に付けられるようになりました。2 つ以上のDao
インターフェースが同じパッケージ内の内部クラスで、それらの名前が同じ場合でも、名前が重複しなくなりました。b/73536380Pojo
の汎用フィールドのタイプが拡張クラスのメンバーとして適切に解析されるようになりました。b/73534868依存関係アーティファクトから継承した、
Dao
インターフェースのクエリ パラメータが適切に解析されるようになりました。b/68118746@Relation
用に生成されたクエリが、フィールド名を適切にエスケープするようになりました。b/70925483
2018 年 2 月 27 日
Paging 1.0.0-alpha6
がサポート ライブラリ リリース 27.1.0 とともにリリースされました。
ListAdapter
といくつかの関連するクラスが Paging ライブラリから直接 Recyclerview に移動されたほか、一部のクラスでは機能を明確にするために名前が変更されました。API の互換性を破る重大な変更は、この Paging のアルファ版リリースが最後になる見込みです。
API の変更
- recyclerview-v7 に移動されたクラス:
ListAdapter
- 名前が変更され、recyclerview-v7 に移動されたクラス:
ListAdapterHelper
->AsyncListDiffer
ListAdapterConfig
->AsyncDifferConfig
DiffCallback
->DiffUtil.ItemCallback
- paging-runtime 内で名前が変更されたクラス:
PagedListAdapterHelper
->AsyncPagedListDiffer
移動されたクラスは、Paging ライブラリから独立しており、RecyclerView とともに有用なクラスでした。つまり、これらのクラスは Paging のアルファ版リリースに左右されずに使用することができます。ただし、Paging を使用するアプリでは、Alpha 6 へのアップグレードに加え、Support Library 27.1.0 へのアップグレードも同時に行う必要があります。
** Paging Alpha6 の移行ガイド **
- Paging と RecyclerView の依存関係を
android.arch.paging:runtime:1.0.0-alpha6
とcom.android.support:recyclerview-v7:27.1.0
に更新します。- これらは同時に行う必要があります(ListAdapter が Paging から RecyclerView に移動されたため)。
ListAdapterHelper
の参照をAsyncListDiffer
に更新します。- より明示的な
getCurrentList().getItem(index)
とgetCurrentList().size()
の呼び出しパターンを優先し、getItem(index)
とgetItemCount()
は削除されています。
- より明示的な
ListAdapterConfig
の参照をAsyncDifferConfig
に更新します。DiffCallback
の参照をDiffUtil.IttemCallback
に更新します。PagedListAdapterHelper
の参照をAsyncPagedListDiffer
に更新します。setList()
の参照をsubmitList()
に更新します。- リスト差分の非同期の性質を明確にするために名前を変更しました。
バグの修正
- プレースホルダが無効になっている場合に、間違った最初の位置が最初の読み込みに渡される問題を修正しました。b/73513780
2018 年 2 月 15 日
Room 1.1.0-alpha2
がリリースされました。
新機能
ログ先行書き込みモードにおいて、Room でデータベースを開けるようになりました。 このモードでは、書き込みによる読み取りクエリのブロックが行われなくなります。また、メモリ消費量は増えますが(複数の接続を確立するため)、通常はより高速になります。デフォルトでは、デバイスが
API 16
以上で、メモリの少なくないデバイスの場合、Room では WAL が使用されます。この動作は、setJournalMode()
メソッドをRoomDatabase.Builder
で使用することによって制御できます。 b/67757002Guava のサポート:
DAO
クエリにおいて、Room が Guava のOptional<T>
またはListenableFuture<T>
を返せるようになりました。ListenableFuture<T>
を使用するには、guava
アーティファクトを Room(android.arch.persistence.room:guava:1.1.0-alpha2
)からインポートする必要があります。Room が
java.util.Optional<T>
をDAO
クエリから返せるようになりました。デフォルトの実装のインターフェース メソッドが、
DAO
クラスの@Transaction
メソッドでサポートされるようになりました。Java 8
とKotlin
の両方でサポートされます。b/72416735
バグの修正
使用可能な別のコンストラクタがある場合、
@Relation
が付与されたコンストラクタが原因のコンパイル エラーが発生しなくなりました。b/72884434@Query
メソッドで'
によってエスケープされるテーブル名が、無効化トラッカーで適切にエスケープされるようになりました。b/72366965Room で Kotlin
@Metadata
アノテーションを使用することで、アノテーションの処理中にクラス構造を読み取れるようになりました。つまり、POJO が依存関係から継承されている場合でも、そのコンストラクタのパラメータ名を適切に読み取ることができます。b/67181813ダウングレード移行パスの検出に関する問題を修正しました。b/72153525
既存のデータベースから Room への移行時に、デフォルト以外の列の型が適切に処理されるようになりました。b/71953987
Room で Kotlin クラスの
boolean?
フィールドの永続化を適切に処理できるようになりました。b/72786402
2018 年 1 月 22 日
Lifecycle 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 の変更
- サポートが終了した
LifecycleActivity
とLifecycleFragment
は削除されました。FragmentActivity
、AppCompatActivity
を使用するか、Fragment
をサポートしてください。 @NonNull
アノテーションがViewModelProviders
とViewModelStores
に追加されました。ViewModelProviders
コンストラクタのサポートが終了しました。その静的メソッドを直接使用してください。ViewModelProviders.DefaultFactory
のサポートが終了しました。ViewModelProvider.AndroidViewModelFactory
を使用してください。- 静的な
ViewModelProvider.AndroidViewModelFactory.getInstance(Application)
メソッドが追加され、ViewModel
インスタンスやAndroidViewModel
インスタンスの作成に適した静的なFactory
を取得できるようになりました。
Room 1.1.0-alpha1
新機能
RawQuery
: この新しい API を使用すると、@Dao
メソッドで SQL をクエリ パラメータとして受け取ることができます。 b/62103290、b/71458963fallBackToDestructiveMigrationsFrom
:RoomDatabase.Builder
のこの新しい API を使用すると、よりきめ細かな制御が可能になり、スキーマ バージョンの破壊的な移行を開始できるようになります(fallbackToDestructiveMigration との比較)。 b/64989640- Room で新しい Paging API(alpha-4 以上)のみをサポートするようになりました。非推奨の
LivePagedListProvider
のサポートは終了しました。新しい Room アルファ版を使用するには、Pagingalpha-4
以上を使用し、LivePagedListProvider
からLivePagedListBuilder
に切り替える必要があります(まだ切り替えていない場合)。
バグの修正
- Kotlin Kapt の型に対するサポートが改善されました。b/69164099
- フィールドの順序によってスキーマが無効化されることがなくなりました。b/64290754
Paging 1.0.0-alpha5
バグの修正
- プレースホルダが無効になっているときのページ読み込みを修正しました。b/70573345
- IllegalArgumentException のバグを見つけるためのログが追加されました。b/70360195(および Room 側の理論的な修正)
- Javadoc のサンプルコードを修正しました。b/70411933、b/71467637
2017 年 12 月 11 日
Paging alpha4-1
がリリースされました。このリリースでは、Paging alpha 4 の小規模なバグ修正が行われています。
バグの修正
- 無効なデータソースのコールバック パラメータが確認されなくなりました。b/70353706、b/70360195
2017 年 12 月 7 日
Paging alpha4
がリリースされました。このリリースでは、ネットワークのユースケース、およびネットワークとデータベースのユースケースを主なターゲットとして重要な変更と追加が行われています。
API の変更
DataSource
が非同期の API になりました。これにより、ページングをネットワークから直接、簡単に行えるようになりました。- 初期のサイズとデータ用の単一のエントリ ポイント。
- コールバックを保持し、後でディスパッチすることにより、ネットワークの再試行をサポートします。
- Threadsafe コールバックを使用すると、非同期読み込みが可能になり、UI スレッド上にネットワーク対応の単一の
PagedList
を作成できるようになります。 - 初期読み込み用のパラメータに関するエラー動作がより明確になりました。
掲載順位に基づくインデックス登録を反映し、プレースホルダが無効になっている場合には画像をタイル表示しないことを示すために、
TiledDataSource
の名前がPositionalDataSource
に変更されました。ネットワークのページ読み込みに埋め込まれた次または前のトークンをサポートするために、
PageKeyedDataSource
が追加されました。また、違いを明確にするために、KeyedDataSource
の名前がItemKeyedDataSource
に変更されました。LivePagedListBuilder
とDataSource.Factory
がLivePagedListProvider
に代わって使用されるようになりました。このビルダーが提供する機能は同じですが、詳細なカスタマイズが可能になり、デフォルトがよりシンプルになっています。出荷時設定で、DataSource
生成コードをLiveData
から独立した状態に維持できます。データベースとネットワークのユースケース用に
PagedList.BoundaryCallback
が追加されました。PagedList.Builder
コンストラクタがDataSource
とPagedList.Config
を取得するようになったため、LivePagedListBuilder
にさらに近づきました。このコンストラクタでは、Java 言語のダイヤモンド演算子や Kotlin の推定型を使用できます。PagedList.getConfig()
が追加され、PagedList.Config
にパブリック メンバーのプロパティが含まれるようになりました。KeyedDataSource.loadBefore()
が逆の結果を推測しないようになりました。表示されている PagedList の更新をリッスンするために、
PagedListAdapter.onCurrentListChanged()
が追加されました。
バグの修正
- PagedListAdapter(ヘルパー)の IndexOutOfBoundsException を修正しました。b/67883658
1.0.0 - 2017 年 11 月 6 日
すべての主要コンポーネント(Paging を除く)が 1.0.0
になりました。今回のリリースは、reactivestreams
ライブラリの 1 点の変更を除き、rc1
とまったく同じです。
バグの修正
LiveDataReactiveStreams
により、リアクティブなストリームの仕様を適切に実装できるようになりました。b/67999342
リリース候補 - 2017 年 10 月 18 日
すべての主要アーティファクト(Paging を除く)が 1.0.0-rc1
になりました。
既知の問題や、1.0.0
でリリース予定の新機能は、これ以上はありません。1.0.0-rc1
を使用するようにプロジェクトをアップグレードし、1.0.0
の信頼性を高めるためのバトルテストにご協力ください。
動作の変更
- このリリースにより、
Lifecycle.Event#ON_STOP
がonSaveInstanceState
の呼び出し時にディスパッチされるようになりました(以前は、ON_STOP
はディスパッチされず、CREATED
としてマークされるだけでした)。詳しくは、Lifecycle のドキュメントをご覧ください。
バグの修正
Room:
- Room が最新の xerial アーティファクトに依存するようになりました。このアーティファクトにより、
OutOfMemory
の問題をコンパイル時に解決できます。b/62473121 Query
メソッドのアノテーションに@Transaction
を使用できるようになりました。 詳しくは、@Transaction
のリファレンス ドキュメントをご覧ください。b/65112315- Room の
StringUtil
クラスが公開 API から削除されました(このクラスは公開 API として意図されたものではありませんでした)。
- Room が最新の xerial アーティファクトに依存するようになりました。このアーティファクトにより、
Lifecycle:
24 未満の API でアクティビティが部分的にカバーされている場合、
LiveData
が適切に動作するようになりました。b/65665621親クラスの
OnLifecycleEvent
メソッドが適切に呼び出されるようになりました。このメソッドを呼び出せない場合は、コンパイル時に警告が出力されます。b/63474615Lifecycle が
WeakReference
を元の状態に戻すようになりました。 LifecycleOwner を使用して、 LifecycleOwner(Lifecycle がメモリに長く保持されている場合) (これは単なる予防措置であり、Lifecycle
をリーク)。
2017 年 10 月 9 日
Paging alpha-3
がリリースされました。これにより、Lifecycle および Room の beta 2
リリースとの互換性が得られるようになります。
バグの修正
- Paging のドキュメントを改善しました。
2017 年 10 月 5 日
すべての主要アーティファクト(Paging を除く)が beta 2
になりました。
このリリースには、Paging の新しいバージョンは含まれていません。
バグの修正
Lifecycle:
LiveData
がアクティブでない場合でも、LiveDataReactiveStreams
でソース パブリッシャーの登録を適切に解除できるようになりました。b/62609183- 親クラスが別のモジュールのクラスでも、ライフサイクル イベントが親クラスに適切に反映されるようになりました。b/63474615
- オブザーバーが登録の作成中に登録を解除しても、LiveData がオブザーバーを適切に処理できるようになりました。b/66337741
Java 8 の言語アーティファクトの
FullLifecycleObserver
を依存関係ツリー内で利用できるようになりました。b/66525578ProGuard の場合、次の行を 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
- 単一の列が
Integer
またはLong
の場合、その主キーにNullable
を指定できるようになりました。b/67086876 - テストモードにおいて、無効化トラッカーが再エントリを適切に処理できるようになりました。b/65471397
- Room で、列名とテーブル名に含まれている無効な文字をコンパイル時にチェックできるようになりました(無効な文字:
`
、"
)。b/64749111
2017 年 9 月 21 日
このリリースで、アーキテクチャ コンポーネントのすべてのモジュールが beta 1
以上になりました(新しい Paging ライブラリ alpha 2
を除く)。
これ以上の API の変更は予定していません。予定外の変更が行われる可能性もありますが、1.0.0
が安定するまでは API の変更に対する制約が非常に大きいため、変更が行われる可能性は低いでしょう。
- LifecycleActivity と LifecycleFragment は、
1.0.0
が安定するまでに削除される予定です。サポート ライブラリ26.1.0
以降を使用している場合は、これらは必要ありません。
アルファ フェーズとは異なり、ベータフェーズの期間は極めて短くなる予定です。
バージョンの変更
- Lifecycle 拡張機能と Room は現在、
beta 1
です。 - Paging は現在
alpha 2
です。 - Lifecycle(ランタイム、共通)と Arch Core(共通)に変更はありません。これらのアーティファクトはどちらも、9 月 13 日以降はバージョン
1.0.0
になります。
新しいアーティファクト
Lifecycle に
common-java8
という新しいアーティファクトが追加されました。このアーティファクトには、DefaultLifecycleObserver という新しいインターフェースが含まれています。さらにこのインターフェースには、Lifecycle のすべてのメソッドで使用できるデフォルトの実装が含まれています。Java 8 言語を使用している場合は、アノテーションよりもこのアーティファクトを優先する必要があります。beta1
のバグにより、新しいcommon-java8
アーティファクトを使用するには、android.arch.lifecycle:common:1.0.1
モジュールに対する明示的な依存関係を追加する必要があります。この問題は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
- アノテーションに
@ColumnInfo
、@Embedded
、@Relation
のいずれかを使用している場合を除き、transient
フィールドはデフォルトで無視されるようになりました。b/62600692 - 主キーが自動生成された場合を除き、そのアノテーションには
@NonNull
を使用しなければならなくなりました。b/64292391- この変更を行う場合、スキーマの移行が必要になることがあります。ご不便をおかけして申し訳ありません。
- 新しい便利なアノテーション(@Transaction)が追加されました。このアノテーションは
DAO
メソッドをオーバーライドしてトランザクション内で実行します。
SQLite データベースのサポート:
- データベース構成の API が変更されました。b/65349673、b/65499876
Paging:
- Paging のドキュメントを改善しました(例を増やし、スレッド アノテーションに関する記述を追加しました)。
バグの修正
- Room:
@Query
メソッド内の Kotlin の複数行の文字列が適切に処理されるようになりました。b/65809374
- Paging:
- Paging アーティファクトが JUnit に依存しなくなりました。b/65690261
1.0.0 Alpha 9-1 - 2017 年 9 月 13 日
このメジャー リリースで、Core Lifecycle アーティファクト(ランタイム、共通)と Arch Core(共通)が安定バージョンの 1.0.0
になりました。
今回の変更に伴い、Support Library 26.1.0 がこれらのライブラリに依存するようになりました。 また、AppCompatActivity と Support Fragment の両方に LifecycleOwner インターフェースが実装されました。
このリリースは、新しい統合を利用するうえで、サポート ライブラリ 26.1.0
にも依存しています。
新しいライブラリ: Paging
このリリースには Paging という新しいライブラリも含まれています。このライブラリを使用すると、必要に応じて大規模なデータセットをチャンク単位で RecyclerView に簡単に読み込むことができます。Paging は alpha1
としてリリースされており、今後は独自のサイクルでリリースされます。
API の変更
- 以下のクラスはサポートが終了し、今後のリリースで削除される予定です。
バグの修正
アプリのクラスパスにアノテーションがある場合、生成されたクラスに
@Generated
アノテーションが付けられるようになりました。 b/35754819MediatorLiveData のオブザーバーの比較に関するバグを修正しました。b/64413274
SQLite
WITH
クエリが [LiveData].[ref-LiveData] でサポートされるようになりました。b/62510164複数のテーブルを監視する場合に InvalidationTracker が適切なリストを送信しないバグを修正しました。b/65099281
Windows で Room が異なるファイルを生成するバグを修正しました。b/64470691
ルート パッケージの LifecycleObserver がサポートされるようになりました。b/62310817
1.0.0 Alpha 9 - 2017 年 8 月 16 日
バグの修正
- 1 つ目のオブザーバーが
onChanged
メソッドから削除された場合に 2 つ目のオブザーバーが無視される、LiveData のバグを修正しました。b/64285805
1.0.0 Alpha 8 - 2017 年 8 月 1 日
動作の変更
- プリミティブ型の列、または NonNull アノテーションが付与された列用に
NOT NULL
制約が追加されました。これによりテーブルの構造が変更されるため、アーキテクチャ コンポーネント alpha 7 以前をすでに使用していて、データを保持したり、ビルダーのfallbackToDestructiveMigration()
メソッドを使用したりする場合は、移行を実装する必要があります。b/62007004
API の変更
- SupportSQLiteProgram で AutoCloseable が拡張されました。b/63131997
1.0.0 Alpha 7 - 2017 年 7 月 26 日
バグの修正
LifecycleObserver の再追加を中断させる、LifecycleRegistry
removeObserver
メソッドの重大なバグを修正しました。カスタム データベース用の InvalidationTracker を修正しました。b/63162311
1.0.0 Alpha 6 - 2017 年 7 月 25 日
動作の変更
LifecycleObserver の呼び出し順序が変更されました。以前は、オブザーバーは追加された順に呼び出されていました。たとえば、
observer2
より前に追加されたobserver1
は、observer2
より前にON_CREATE
とその他すべてのイベントを受け取ります。ただしこれは、破棄イベントには当てはまらなくなりました。破棄イベントの場合、オブザーバーは追加されたのとは逆の順序で呼び出されます。 そのため、現在の動作は次のようになります。observer1
がobserver2
より前に追加された場合、ON_CREATE
はまずobserver1
に送信され、その後でobserver2
に送信されます(ON_START
とON_RESUME
についても同様)。ただし、ON_PAUSE
イベントはまずobserver2
に送信され、その後でのみobserver1
に送信されます(ON_STOP
とON_DESTROY
についても同様)。移行が行われない場合、Room が例外をスローするようになりました。以前は、Room はデータベースをクリアするだけでしたが、現在はクラッシュするようになりました。 デベロッパーはビルダー API を呼び出すことで、クリア動作を有効にできます。b/63872392
API の変更
fallbackToDestructiveMigration()
メソッドがRoomDatabase.Builder
に追加され、移行が見つからない場合にデータベースをクリアできるようになりました。b/63872392アーキテクチャ コンポーネントは Support Library 26.0.0 に依存するようになりました。
バグの修正
@Embedded にネストされた @Relation の処理を修正しました。b/63736065
自動インクリメントされる主キーを持つテーブルの移行テストを修正しました。b/63393618
DELETE クエリまたは UPDATE クエリを実行する @Queries が引数を正しく受け取るようになりました。b/63872538
オーナーのフラグメントがバックスタック内にあり、設定の変更が 2 回行われた場合でも、ViewModel が保持されるようになりました。b/38445801
1.0.0 Alpha 5 - 2017 年 7 月 18 日
API の変更
新しいコールバック メソッドが
RoomDatabase.Builder
に追加され、データベースを作成したまたは開いたタイミングを監視できるようになりました。b/62699324@Query で RxJava の
Maybe
またはSingle
を返せるようになりました。b/62231019
RxJava のサポートを Room に追加するには、android.arch.persistence.room:rxjava2
アーティファクトに依存する必要があります。
バグの修正
パラメータのない
@Delete
クエリを修正しました。b/63608092Room での getter と setter の型チェックを修正しました。b/63733651
1.0.0 Alpha 4 - 2017 年 7 月 11 日
API の変更
新しい便利なメソッド(
runInTransaction()
)が RoomDatabase に追加されました。@Insert
、@Delete
、@Update
の各メソッドで、さまざまなエンティティ タイプのパラメータを使用できるようになりました。b/62682405
バグの修正
@Dao
メソッドのbyte[]
の処理を修正しました。b/62460045Room の移行チェックにおいて、大文字と小文字を区別しない比較が使用されるようになりました。b/62875382
Lifecycle アーティファクトの ProGuard の設定を修正しました。b/62113696
1.0.0 Alpha 3 - 2017 年 6 月 15 日
API の変更
@OnLifecycleEvent
が 1 つのイベント パラメータのみをサポートするようになりました。 これは Java 8 のサポートに備えた変更であり、将来には、デフォルトのメソッドでインターフェースに移行できるようになります。この変更に関連して、@OnLifecycleEvent(ON_ANY)
アノテーションが付与されたメソッドでのみ、2 つ目のEvent
型のパラメータを受け取れるようになりました(1 つ目のパラメータはLifecycleOwner
)。詳しくは、Lifecycle のドキュメントをご覧ください。LifecycleActivity
クラスとLifecycleFragment
クラスがandroid.arch.lifecycle:extensions
アーティファクトに移動されました。MigrationTestHelper は、
Context
ではなく Instrumentation インスタンスを受け取ることにより、テストアセットからスキーマを読み取って、アプリのコンテキスト内にデータベースを作成できます。@DAO
メソッドの@Insert
、@Delete
、@Update
の各アノテーションで、パラメータの型としてIterable
を使用できるようになりました。b/62259820
バグの修正
ライフサイクル イベントでオーバーライドされたメソッドが複数回呼び出されることがなくなりました。
複数の
IN
パラメータが適切に処理されるようになりました。b/62608681@Database
インスタンスを受け取るコンストラクタを DAO 抽象クラスに含めることが可能になりました。b/38488747DAO
で、type パラメータを含むスーパークラスまたはインターフェースを使用できるようになりました。b/62103620
1.0.0 Alpha 2 - 2017 年 6 月 2 日
API の変更
InvalidationTracker コールバックが変更済みのテーブル名のリストを受け取るようになりました。b/38468740
SupportSQLiteDatabase クラスの API サーフェスが縮小されました。b/38481640
バグの修正
- ライフサイクル用の ProGuard ファイルを修正しました。b/62113696
- 型コンバータによるデータの消失を修正しました。b/62100716
@Insert
クエリからLong[]
を返せるようになりました。
1.0.0 Alpha 1 - 2017 年 5 月 17 日
MinSDK: 14
一般的な注意事項
リリース前にさまざまなテストを実施しましたが、アーキテクチャ コンポーネントは現時点ではアルファ版です。製品版アプリを作成する場合は、API が 1.0 のリリース前に変更されること、API が十分な堅牢性を備えていない可能性があることに注意してください。使用するライブラリの問題をデバッグする自信がない場合は、最初にサイド プロジェクトでアーキテクチャ コンポーネントを試用してみることをおすすめします。
すべての人に今すぐ移行することをおすすめしているわけではありません。アーキテクチャ コンポーネントの 1.0 リリースに対応した移行ガイドをお読みください。
既知の制限事項と問題
- サポート ライブラリ内の Lifecycle の
Fragment
とActivityCompat
には、LifecycleOwner
インターフェースがまだ実装されていません。アーキテクチャ コンポーネントのバージョン 1.0.0 で実装される予定です。