目的
個人的主観です。
Kotlinでのコルーチン(Androidで非同期を行う時に利用する機能)の利用例として、
GlobalScope.launch
を用いて説明しているサイトをかなり多く見受けられます。
ただ、個人的には、
GlobalScope.launch
は使わない方が良いと思います。
そのメモ。
環境
- Android Studio 4.0.1
- Kotlin 1.3.50
参照サイト
対応メモ
上記KotlinのCoroutineを記載している公式サイトにて、
最初から思いっきりGlobalScope.launch
の利用例を載せてます。
実際、GlobalScope.launch
は軽量で使いやすいということです。
ただ、
そのページ中程に以下の文章があります。
If we forget to keep a reference to the newly launched coroutine, it still runs.
...
Having to manually keep references to all the launched coroutines and join them is error-prone.
manually keep referencesや、still runsや、error-proneなどと書いていて、
処理内容がある程度メモリに残ってしまうようなニュアンスがあります。
代わりにrunBlocking
を使えなどの記載も見受けられます。
軽量なので、そうそうメモリリークすることないと思いますが、
GlobalScope.launch
を利用し続けるのは控えた方が良いと思いました。
まぁ、実際そういう案件に遭遇して、別の関数に置き換えたんですけどね。。。
置き換えについては以下を利用しましたが、、
AsyncTaskもちょいちょい悪い評判聞きまし、Android 11ではDeprecatedになるよう。
private val mHandler = Handler(Looper.getMainLooper())
AsyncTask.execute{
...
mHandler.post{ // メインスレッド
...
}
}
以上です。