博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity中使用kotlin协程的几种写法
阅读量:3975 次
发布时间:2019-05-24

本文共 3478 字,大约阅读时间需要 11 分钟。

一、AppCompatActivity实现CoroutineScope接口:

class Test1Activity : AppCompatActivity(), CoroutineScope {    private lateinit var job: Job    override val coroutineContext: CoroutineContext        get() = Dispatchers.Main + job    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        job = Job()        test()    }    private fun test() {        launch {            val result = withContext(Dispatchers.IO) {                delay(1000)                "0"            }            Log.d("result", result)        }    }    override fun onDestroy() {        super.onDestroy()        job.cancel()    }}

二、直接实例化MainScope:

class Test2Activity : AppCompatActivity() {    private val mailScope = MainScope()    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        test()    }    private fun test() {        mailScope.launch {            val result = withContext(Dispatchers.IO) {                delay(1000)                "0"            }            Log.d("result", result)        }    }    override fun onDestroy() {        super.onDestroy()        mailScope.cancel()    }}

三、导入implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0-alpha02',就可以直接在AppCompatActivity调用lifecycleScope:

class Test3Activity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        test()    }    private fun test() {        lifecycleScope.launch {            val result = withContext(Dispatchers.IO) {                delay(1000)                "0"            }            Log.d("result", result)        }    }    override fun onDestroy() {        super.onDestroy()        lifecycleScope.cancel()    }}

最后发一下使用协程和RxJava的代码量和可读性对比:

协程:

dialog.show()        lifecycleScope.launch {            val result = withContext(Dispatchers.IO) {                sendHtmlMail()            }            dialog.dismiss()            if (result == OK) {                makeText(this@EmailReplyActivity, getString(R.string.mail_send_success_hint))                finish()            } else if (result == ERR) {                makeText(this@EmailReplyActivity, getString(R.string.mail_send_fail_hint))            }        }

RxJava:

dialog.show()        Observable.create { emitter: ObservableEmitter
-> val result = sendHtmlMail() emitter.onNext(result) emitter.onComplete() }.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(object : Observer
{ override fun onSubscribe(d: Disposable) { compositeDisposable.add(d) } override fun onNext(value: String?) { if (value.equals(OK)) { makeText(this@EmailReplyActivity, getString(R.string.mail_send_success_hint)) finish() } else if (value.equals(ERR)) { makeText(this@EmailReplyActivity, getString(R.string.mail_send_fail_hint)) } } override fun onError(e: Throwable) { dialog.dismiss() e.printStackTrace() } override fun onComplete() { dialog.dismiss() } })

突然觉得RxJava很恶心有没有

 

 

转载地址:http://uorki.baihongyu.com/

你可能感兴趣的文章
数字地和模拟地处理的基本原则
查看>>
集电极开路,漏极开路,推挽,上拉电…
查看>>
长尾式差分放大电路2
查看>>
十种精密整流电路
查看>>
红外线遥控原理
查看>>
放大电路的主要性能指标?
查看>>
稳压、调压、监控、DC/DC电路大全
查看>>
放大电路的主要性能指标?
查看>>
运放电压和电流负反馈的讨论
查看>>
运放自激问题
查看>>
运放电压和电流负反馈的讨论
查看>>
终于 整明白了中断的工作原…
查看>>
终于 整明白了中断的工作原…
查看>>
终于 整明白了中断的工作原…
查看>>
终于 整明白了中断的工作原…
查看>>
2010年11月19日
查看>>
2010年11月19日
查看>>
TC35i 单片机
查看>>
TC35i 单片机
查看>>
AT 命令详解
查看>>