diff --git a/app/src/main/java/keijumt/devandroid/common/Calculate.kt b/app/src/main/java/keijumt/devandroid/common/Calculate.kt deleted file mode 100644 index 58ec5f4..0000000 --- a/app/src/main/java/keijumt/devandroid/common/Calculate.kt +++ /dev/null @@ -1,34 +0,0 @@ -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/common/Task.kt b/app/src/main/java/keijumt/devandroid/common/Task.kt new file mode 100644 index 0000000..e2fdf8a --- /dev/null +++ b/app/src/main/java/keijumt/devandroid/common/Task.kt @@ -0,0 +1,52 @@ +package keijumt.devandroid.common + +import android.os.AsyncTask +import java.util.concurrent.CountDownLatch + +class Task(val callback: Callback) : AsyncTask() { + + override fun doInBackground(vararg params: Void?): Int { + val countDownLatch = CountDownLatch(2) + var value1 = 0 + var value2 = 0 + + val squireTask1 = SquareTask(object : Callback { + override fun execute(value: Int) { + value1 = value + } + }, countDownLatch) + val squareTask2 = SquareTask(object : Callback { + override fun execute(value: Int) { + value2 = value + } + }, countDownLatch) + + squireTask1.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 3) + squareTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, 5) + + countDownLatch.await() + return value1 * value2 + } + + override fun onPostExecute(result: Int?) { + callback.execute(result!!) + } + + private class SquareTask(val callback: Callback, val countDownLatch: CountDownLatch) : AsyncTask() { + override fun doInBackground(vararg params: Int?): Int { + println("doInBackground, param is ${params.get(0)}") + val value = params.get(0)!! + return value * value + } + + override fun onPostExecute(result: Int?) { + println("onPostExecute, result is ${result}") + callback.execute(result!!) + countDownLatch.countDown() + } + } + + 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 84419cf..a7306a8 100644 --- a/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt +++ b/app/src/main/java/keijumt/devandroid/viewmodel/AsyncViewModel.kt @@ -1,52 +1,23 @@ 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 android.os.AsyncTask +import keijumt.devandroid.common.Task 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}") + fun async() { + val calc = Task(object : Task.Callback { + override fun execute(value: Int) { + println("callback is ${value}") } - } - val asyncCalc = Calculate(callback) - asyncCalc.execute(10) - println("finish initialize") + }) + calc.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR) + } - 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}") - } + fun coroutine() { + } - val flowable = object : Flowable() { - override fun subscribeActual(s: Subscriber?) { - println("start flowable") - Thread.sleep(3000) - s?.onNext(10) - } - } - + fun rx() { } } \ 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 a976362..3e0022c 100644 --- a/app/src/main/res/layout/fragment_async.xml +++ b/app/src/main/res/layout/fragment_async.xml @@ -1,5 +1,5 @@ - + @@ -11,6 +11,33 @@ - + +