タブレット用プログラムの書き止め

android OS & iPadOS の記録。

【kotlin】 Coroutinesについて

2024-05-22 22:20:09 | Android studio 日記

個人見解です。

同期タイプと非同期タイプがある。

runBlocking {} は同期タイプ。
UI(メイン)スレッドを止めてワーカースレッドの処理を待つ。
処理後にUIスレッドに戻り処理を続ける。

launch {} は非同期タイプ。
UIスレッドは動き続ける。ワーカースレッドは処理後に指定の場所に保存して通知を送る。
UIスレッドは通知が来たらデータを取り出し処理をする。

ワーカースレッドは、シングル、マルチが指定できる。
低性能CPUは少ないスレッド数でないとUIスレッドに悪影響がでる。

 

    private val parentJob = Job()

    fun test() { 

          /*
            * 呼ばれた分が同時に処理を始める。
            * 性能の低い機種はUI処理に滞りが出るので注意。
            */
          CoroutineScope.launch( parentJob ) {
                asyncTask()
          }


          /*
            * プールに積んで非同期でシングル処理を行う。
            */
          CoroutineScope(
                Executors.newSingleThreadExecutor().asCoroutineDispatcher()
          ).launch( parentJob ) {
                asyncTask()
          }


          /*
            * プールに積んで非同期で指定数の処理を並行する。ここでは4スレッド指定。
            */
           CoroutineScope(
                Executors.newFixedThreadPool(4).asCoroutineDispatcher()
           ).launch(parentJob) {
                asyncTask()
           }

    }

    suspend fun asyncTask() { 

        /* 省略 * /
    }

    override fun onDestroy() {
          parentJob.cancel // 実行中、待機中の非同期処理を止める。
          super.onDestroy()
    }

kotlinの非同期処理はシンプルで応用も簡単。
宣言が、Javaより厳格だけど慣れれば分かりやすい。
市販のガイドがJavaだった。それが不幸の始まりだったかも(笑)