ユーザ用ツール

サイト用ツール


kotlin:coroutines

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
kotlin:coroutines [2020/01/14 06:27]
ips [mainスレッド(UIスレッド)へのアクセスが簡単]
kotlin:coroutines [2020/01/14 07:03] (現在)
ips [まとめ]
ライン 227: ライン 227:
 </​code>​ </​code>​
  
 +===== join =====
 +コルーチン内で他のコルーチンの終了を待機する。
 +
 +<code kotlin>
 +    fun TestCoroutin(){
 +        Log.d( ​ "​coroutine","​start"​)
 +        GlobalScope.launch() {
 +
 +            launch {
 +                Log.d( ​ "​coroutine","​coroutin_inner"​)
 +            }
 +
 +            Log.d( ​ "​coroutine","​coroutin_outer"​)
 +        }
 +        Log.d( ​ "​coroutine","​end"​)
 +    }
 +    ↓
 +2020-01-14 06:​29:​12.311 7952-7952/​com.nekotype.ips.coroutine D/​coroutine:​ start
 +2020-01-14 06:​29:​12.340 7952-7952/​com.nekotype.ips.coroutine D/​coroutine:​ end
 +2020-01-14 06:​29:​12.347 7952-7998/​com.nekotype.ips.coroutine D/​coroutine:​ coroutin_outer
 +2020-01-14 06:​29:​12.348 7952-7999/​com.nekotype.ips.coroutine D/​coroutine:​ coroutin_inner
 +</​code>​
 + ↓
 +<code kotlin>
 +    fun TestCoroutin(){
 +        Log.d( ​ "​coroutine","​start"​)
 +        GlobalScope.launch() {
 +
 +            launch {
 +                Log.d( ​ "​coroutine","​coroutin_inner"​)
 +            }.join() // 待つ
 +
 +            Log.d( ​ "​coroutine","​coroutin_outer"​)
 +        }
 +        Log.d( ​ "​coroutine","​end"​)
 +    }
 +    ↓
 +2020-01-14 06:​30:​51.472 8058-8058/​com.nekotype.ips.coroutine D/​coroutine:​ start
 +2020-01-14 06:​30:​51.500 8058-8058/​com.nekotype.ips.coroutine D/​coroutine:​ end
 +2020-01-14 06:​30:​51.505 8058-8111/​com.nekotype.ips.coroutine D/​coroutine:​ coroutin_inner //​順番が変わる
 +2020-01-14 06:​30:​51.508 8058-8110/​com.nekotype.ips.coroutine D/​coroutine:​ coroutin_outer //​順番が変わる
 +</​code>​
 +
 +
 +===== runBlockingとasync =====
 +runBlockingとasyncは戻り値をもつことができる。
 +asyncは非同期に処理する。asyncにはawaitでまつことができる。
 +
 +===== まとめ =====
 +
 +UIにアクセスするには
 +GlobalScope.launch(Dispatchers.Main) {...
 +
 +Jobを取得してキャンセルするには
 +myjob=GlobalScope.launch { ...
 +myjob.cancel()
 +
 +戻り値を取得するには
 +runBlocking
 +async
 +
 +待ちたいとき(同期)
 +GlobalScope.launch() {
 +launch { ... }.join() ​
 +
 +待ちたいとき(非同期) ​   ​
 +GlobalScope.launch() {
 +async { ... }.await() ​
kotlin/coroutines.1578950821.txt.gz · 最終更新: 2020/01/14 06:27 by ips