美文网首页KotlinkotlinAndroid知识
67. (android开发)kotlin异步更新主线程

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

作者: 厚土火焱 | 来源:发表于2018-03-15 00:05 被阅读195次

    前几天抽空写了个文件和数据同时上传的内容。因为是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带一些数据返回主线程。这就是异步更新了。

    相关文章

      网友评论

        本文标题:67. (android开发)kotlin异步更新主线程

        本文链接:https://www.haomeiwen.com/subject/ajqcqftx.html