67. (android开发)kotlin异步更新主线程

前几天抽空写了个文件和数据同时上传的内容。因为是go语言服务端为主,虽然客户端是kotlin android,但是没有发在这个文集中。有感兴趣的朋友,可以去 go学习笔记 中的编号 62 的笔记中找来看。
今天偶尔遇到服务端下载图片,需要异步更新的代码。于是写了个kotlin例子。
先交代一下场景。服务器上放着很多图片,android端需要同时下载好多张图片,并且显示。
但是android下载数据是很快的,可图片文件下载赶不上速度,就需要使用异步更新了。
这个例子使用了 Handler 和 Thread。
首先在主线程中,声明 Handler

val handle = object: Handler(){
     override fun handleMessage(msg: Message?) {
        holder?.txtvwPhoto?.setImageURI(Uri.fromFile(File("/sdcard/jian/" + manager?.Id.toString() + "_photo.png")))
     }
}

这里的 holder?.txtvwPhoto?.setImageURI(Uri.fromFile(File(“/sdcard/jian/” + manager?.Id.toString() + “_photo.png”))) 是为了让主线程在子线程执行完毕后执行的语句。这里是显示一个指定地址的图片。

Thread(object : Runnable{
           override fun run() {
                  try {
                        ppp = SavaImage(GetImageInputStream(ppp)!!, Environment.getExternalStorageDirectory().getPath() + "/jian", manager?.Id.toString() + "_photo.png")

                        val msg = Message.obtain()
                        msg.obj = ""
                        //返回主线程执行
                        handle.sendMessage(msg)

                       } catch (e: Exception) {
                          Log.d("recycler下载网络图片:------》", e.message)
                       }
           }
}).start()

在子线程中,Thread做了一些下载的操作。ppp = SavaImage(GetImageInputStream(ppp)!!, Environment.getExternalStorageDirectory().getPath() + “/jian”, manager?.Id.toString() + “_photo.png”)
当然,你可以在这里写你想做的任何耗时的操作。
然后,用 handle.sendMessage(msg) 顺利回城了。

这个例子中的 msg并没有起到什么作用。而利用这个例子,完全可以让msg带一些数据返回主线程。这就是异步更新了。

    原文作者:Android
    原文地址: https://www.jianshu.com/p/6a3793382053
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞