0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kotlin Coroutineについてのアウトプット

Posted at

Coroutine関数

今回は、この学習教材を利用してkotlin coroutineを勉強したので早速アウトプットします。
参考URL→https://www.youtube.com/watch?v=ShNhJ3wMpvQ

(英語での学習になります!)

このコルーチン関数のメリットは、非同期処理を行うことができることです。
上から下に処理を行っていくような通常な処理では、モバイルアプリに対応するのが難しいのでこの非同期処理ができるかできないかで処理速度の効率が変わってきます。

簡単なCoroutineスクリーンショット (387).png

通常なら、上から下に処理が進むはずですがこの場合
3s後に、Logの内容が表示されるような処理になっています。

つまり、先にどのスレッドから呼び出されるかがわかるということです!

launchにパラメータを持たせよう

launchに持たせることのぱらーめの種類
Dispatchers.Main→メインスレッドで処理を行い処理が軽いものに適している
Dispatchers.IO→ネットワーク、データベースとの処理の時に適している
Dispatchers.Default→作業量が大きく負荷の高い処理に適しています
状況に合わせてパラメータを与えることで処理を最適化することができる!

スクリーンショット (390).png

withContextを用いることで、自動でビューに表示する内容を変更してくれる!

Coroutineをうまく使い、処理の最適解を見つけることができるならコードの量を減らすことができる。

RunBlocking

RunBlockingとは?
→処理を中断し、コルーチン関数が終わるまで次の処理が行わせない

スクリーンショット (391).png

・runBlockingの中身の処理が終わるまで次の処理に移ることがないことをわかりやすくするための練習問題がこれです。

スクリーンショット (393).png

どの順になるか予想できましたか??
答えは→1,5,3,2,4です。

コルーチン関数の中断、処理終了後の処理

まず繰り返し処理終了後から

スクリーンショット (396).png

5回の繰り返しが終わった後に、runBlockingの処理が実行されます。

コルーチン関数の中断の処理

スクリーンショット (398).png

この時に注意しないといけないことは、非同期処理にコルーチン関数は夢中なので中断されたことに気づかずに中断のLog表示が出ても繰り返し処理を行ってしまうので、条件構文でActiveなのかどうかを確認して処理を中断させる必要があります。

また、別の方法として以下の方法があります。
スクリーンショット (399).png

wighTimeoutの引数に時間を与えることで処理を中断できるので、runblockingの処理が必要なくなります。
ですが、同様に処理を中断したかどうかの判断をコルーチン関数に与えないと処理を止めることができないので、

中断の処理には注意が必要です。

よくある間違い

次のようなコルーチン関数の使い方は注意が必要です。
スクリーンショット (400).png

この処理を実行すると、三秒後に各Logが表示されるではないかと考えませんか?
→少なくとも私はそう感じてしまいました。

この処理を行うと、コルーチン関数すべての処理が終わってからLog表示なので3秒後に表示したくても6秒かかってしまいます。

こうしたミスを減らすには、以下の二つのコーディング方法があります。

1つ目

スクリーンショット (401).png

初期化をおくらせて、コルーチン関数の中で初期化をして処理が終わってからLog表現という方法があります。
ですが、次の方法を使えばよりスマートなコードになります。

2つ目

スクリーンショット (402).png

asyncを使った処理を用いることです!

→この処理とlaunchの違いは、戻り値を含むsuspend関数に対応できるかどうかの違いがあります。
(ここの訳を間違ってたらすいません。)

また、.join()でコルーチン関数の処理を待っていたものを

.await()にすることでよりスマートなコードになっています。

以上簡単でしたが、コルーチン関数についてべんきょして分かったことをアウトプットしてみました。

英語の動画ですがとても分かりやすかったので初学者の方にお勧めできます。

参考URL→https://www.youtube.com/watch?v=ShNhJ3wMpvQ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?