Kotlin Thread 开启异步线程 的几种方法

1 Thread

  val handle = object : Handler() {
    override fun handleMessage(msg: Message?) {
        msg.let {
             val msgtmp =  msg?.obj
        }
    }
}

/**
 - 异步线程 
 */
Thread(object : Runnable{
    override fun run() {
        val msg = Message.obtain()
        msg.obj = "信息"
        //返回主线程
        handle.sendMessage(msg)
    }
}).start()

2 AsyncTask

val resolver = baseContext.contentResolver

class AudioTask: AsyncTask<ContentResolver,Void,Cursor>() {

    /**
     * 回到主线程中调用
     */
    override fun onPostExecute(result: Cursor?) {
        super.onPostExecute(result)
        // 打印查询结果
        print(cursor.toString())
    }


    /**
     * 后台new的Thread 开始 后台查询
     */
    override fun doInBackground(vararg p0: ContentResolver?): Cursor {

      val  cursor = p0[0].query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                arrayOf(MediaStore.Audio.Media.DATA,
                        MediaStore.Audio.Media.DISPLAY_NAME,
                        MediaStore.Audio.Media.SIZE
                        ),
                null,
                null,
                null
                )

        return cursor
    }
}

AudioTask().execute(resolver)

3 AsyncQueryHandler

val reselor = baseContext.contentResolver

val handle = object : AsyncQueryHandler(reselor){

    /**
     * 查询完成 主线程回调 处理
     */
    override fun onQueryComplete(token: Int, cookie: Any?, cursor: Cursor?) {
        super.onQueryComplete(token, cookie, cursor)
        // 打印查询结果
        print(cursor.toString())
    }


}

/**
 * 异步线程 开始查询 
 */
handle.startQuery(0,null,MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        arrayOf(MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media.DISPLAY_NAME,
                MediaStore.Audio.Media.SIZE),
        null,
        null,
        null)

版权声明:本文为Sico2Sico原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。