diff --git a/app/src/main/java/keijumt/devandroid/common/Calculate.kt b/app/src/main/java/keijumt/devandroid/common/Calculate.kt new file mode 100644 index 0000000..58ec5f4 --- /dev/null +++ b/app/src/main/java/keijumt/devandroid/common/Calculate.kt @@ -0,0 +1,34 @@ +package keijumt.devandroid.common + +import android.os.AsyncTask + +class Calculate(val callback: Callback) : AsyncTask() { + + // ui thread + override fun onPreExecute() { + println("onPreExecute") + } + + override fun doInBackground(vararg params: Int?): Int { + try { + println("doInBackground") + Thread.sleep(3000) + } catch (e: Exception) { + + } + val value = params.get(0) ?: 1 + return value * value + } + + override fun onProgressUpdate(vararg values: Int?) { + println("onPorgressUpdate") + } + + override fun onPostExecute(result: Int?) { + callback.execute(result) + } + + interface Callback { + fun execute(value: T?) + } +} \ No newline at end of file diff --git a/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt b/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt index f55213c..84419cf 100644 --- a/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt +++ b/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt @@ -1,7 +1,52 @@ package keijumt.devandroid.viewmodel +import io.reactivex.Flowable +import keijumt.devandroid.common.Calculate +import kotlinx.coroutines.experimental.android.UI +import kotlinx.coroutines.experimental.async +import kotlinx.coroutines.experimental.delay +import kotlinx.coroutines.experimental.launch +import org.reactivestreams.Subscriber import javax.inject.Inject class AsyncViewModel @Inject constructor() : BaseViewModel() { - + + init { + println("start initialize") + val callback = object : Calculate.Callback { + override fun execute(value: Int?) { + println("callback execute value is ${value}") + println("call back thread is ${Thread.currentThread().name}") + } + } + val asyncCalc = Calculate(callback) + asyncCalc.execute(10) + println("finish initialize") + + launch(UI) { + val calc1 = async { + println("start async calc1") + delay(3000) + return@async 10 + } + val calc2 = async { + println("start async calc2") + delay(3000) + return@async 6 + } + val value1 = calc1.await() + val value2 = calc2.await() + println("value1 is ${value1}, value2 is ${value2}") + println("async await thread is ${Thread.currentThread().name}") + } + + val flowable = object : Flowable() { + override fun subscribeActual(s: Subscriber?) { + println("start flowable") + Thread.sleep(3000) + s?.onNext(10) + } + } + + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_async.xml b/app/src/main/res/layout/activity_async.xml index d8fb324..49d2d14 100644 --- a/app/src/main/res/layout/activity_async.xml +++ b/app/src/main/res/layout/activity_async.xml @@ -1,6 +1,12 @@ - + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_async.xml b/app/src/main/res/layout/fragment_async.xml index 7a39090..a976362 100644 --- a/app/src/main/res/layout/fragment_async.xml +++ b/app/src/main/res/layout/fragment_async.xml @@ -11,6 +11,6 @@ - + \ No newline at end of file