[Andriod] unit4_pathway1

2550 ワード

学習目標:
  • 同時実行の定義と同時実行が重要であるのは、
  • スレッドとスレッドを用いて非ブロック同時実行コードを記述する方法
  • バックグラウンドでタスクを実行するとき、UI更新を安全に実行するためにメインスレッドにアクセスする方法:
  • 他の同時モード(Scope/dispatchers/deffered)の使用方法、
  • の使用方法
  • ネットワークリソースと対話するコードを記述する方法
  • このCordelabでは、Kotlinがスレッドとスレッドをどのように使用するかを理解するための小さなプログラムを作成します.

    紹介する


    マルチスレッド同時実行


    アプリケーションが増えるにつれて、同時に実行することを考慮する必要があります.
    同時に実行することで、複数のコードユニットを順次または並列に実行でき、リソースの使用効率が向上します.
    オペレーティングシステムは、システム、プログラミング言語、およびコンカレントユニットの特性を使用して、マルチタスク処理を管理できます.

    同時実行が必要な理由:
    これは,アプリケーションを実行しながらも,ネットワークリクエストなどの長期的なジョブの実行を停止しないためである.
    実際の生活のたとえ:炊事ボタンを押して、ご飯を炊く時にテーブルを並べます.つまり、何かを楽屋に置いて、他のことをします.(料理)
    スレッド:プログラム範囲内で所定および実行可能なコードの最小単位.
    fun main() {
        val thread = Thread {
            println("${Thread.currentThread()} has run.")
        }
        thread.start()//함수가 start() 함수 호출에 도달할 때까지 스레드가 실행되지 않는다.
    }
    Thread[Thread-0,5,main] has run.//Thread[出力文スレッドの名前、優先度、スレッドグループ]

    複数のスレッドの作成と実行

    fun main() {
       val states = arrayOf("Starting", "Doing Task 1", "Doing Task 2", "Ending")
       repeat(3) {
           Thread {
               println("${Thread.currentThread()} has started")
               for (i in states) {
                   println("${Thread.currentThread()} - $i")
                   Thread.sleep(50)
               }
           }.start()
       }
    }
    
    しゅつりょくぶん
    Thread[Thread-2,5,main] has started Thread[Thread-2,5,main] - Starting Thread[Thread-0,5,main] - Doing Task 1 Thread[Thread-1,5,main] - Doing Task 1 Thread[Thread-2,5,main] - Doing Task 1 Thread[Thread-0,5,main] - Doing Task 2 Thread[Thread-1,5,main] - Doing Task 2 Thread[Thread-2,5,main] - Doing Task 2 Thread[Thread-0,5,main] - Ending Thread[Thread-2,5,main] - Ending Thread[Thread-1,5,main] - Ending Thread[Thread-0,5,main] has started
    Thread[Thread-0,5,main] - Starting
    Thread[Thread-1,5,main] has started
    Thread[Thread-1,5,main] - Starting

    コルディンの概要


    コルディンって何?(co+ルーチン)パラレルプログラム
    coluceneはcolucene起動のスレッドを中断することなく非同期で実行されるコードである.(AsyncTask)スレッド管理を直接行う必要がなく、既存のマルチスレッドよりも効率的に実行できます.
    コルディンの機能
  • Job
  • 取り消し可能な作業単位(launch()関数で作成された作業単位など).
  • CoroutineScope
  • 新しいcoution(launch()やasync()など)を作成するための関数はCoroutineScopeを拡張します.
  • Dispatcher
  • コルディンが使用するスレッドを特定します.Main Dispatcherは常にメインスレッド上でcoutineを実行しますが、DefaultやIOやUnconfigedなどのDispatcherは他のスレッドを使用します.