Android: JetpackのCoroutine Supportについて
Updated at Sun, Mar 10, 2019Jetpackのいくつかのライブラリでは、Kotlin Coroutineのサポートが入っていますが、 どのライブラリで対応が進んでいるか気になったので、軽くまとめます。使い方については言及しません。
以下、2019年3月10日 2019年3月11日の調査結果になります。
また、これらは、supportライブラリのリポジトリから取ってきたので、現在リリースされているかどうかは不明です。
Lifecycle
// Lifecycleに従うCoroutineScopeの生成
val Lifecycle.coroutineScope: CoroutineScope
LifecycleOwner
// LifecycleOwnerに従うCoroutineScopeの生成
val LifecycleOwner.lifecycleScope: CoroutineScope
ViewModel
// ViewModelに従うCoroutineScopeの生成
val ViewModel.viewModelScope: CoroutineScope
WorkManager
abstract class CoroutineWorker(
appContext: Context,
params: WorkerParameters
) : ListenableWorker(appContext, params) {
// suspendメソッドで定義された
abstract suspend fun doWork(): Result
}
Room
// Dao内でsuspendメソッドが使える
@Dao
interface HogesDao {
@Insert
suspend fun add(hoge: Hoge)
@Query("SELECT * FROM hoge WHERE id = :id")
suspend fun get(id: String): Hoge
...
}
まとめ
- Lifecycle、LifecycleOwner、ViewModelはそれらのライフサイクルに従う、CoroutineScopeの生成が出来る
- WorkManagerのdoWorkがsuspendメソッドになった
- doWorkの中で、他のsuspendメソッドがコールできる
- RoomのDao内でsuspendメソッドが定義出来る
結構対応がされていた😃😃😃
補足
- LiveDataへのサポートも入るかも
- Lifecycleに特定のstateに入った時に実行される拡張関数群が入りそう