zoukankan      html  css  js  c++  java
  • 关于handler和异步任务

    handler使用流程概要

    首先在主线程新建一个handler实例,重写onhandlemessage(Message msg) 方法,对传过来的message进行处理

    然后在子线程中完成操作,操作完成后新建一个message对象,调用handler实例的sendmessage方法,将message传给消息队列,再由Looper分发给handler

    异步任务使用流程

    新建一个类,继承 AsyncTask<Void,Integer,Integer>,三个泛型分别是传入参数类型,进度类型,结果类型

    在这个类里面主要重写几个方法

     protected void onPreExecute() 在doinbackground之前调用,做准备工作,在子线程运行

     protected Integer doInBackground(Void... params)   具体的子线程操作

    在这个方法里可以用publishProgress()方法来更新进度

     protected void onProgressUpdate(Integer... values)更新进度,运行在UI线程

    protected void onPostExecute(Integer integer) doinbackground执行完毕后执行,运行在UI线程

    要使用这个类,新建一个实例,然后调用该实例的excute()方法即可。

    关于这二者的区别,handler比较容易对子线程的过程进行精确控制,但是代码繁琐,不简洁

              Asynctask代码简洁,但是操作不精细

    网上有人说asynctask比handler轻量级,其实不准确,因为asynctask内部还包含了一个线程池的处理,其实是比handler更重量级的,只是代码看起来更简洁,所以说是轻量级的

    -----人若无名,则可专心练剑
  • 相关阅读:
    浅析ES6中的iterator
    nodejs中的异步回调机制
    用好js与nodejs中的try...catch
    vscode设置html默认浏览器
    nodejs中相互引用(循环引用)的模块分析
    ES6—带默认值的函数参数及其作用域
    函数声明与函数表达式的区别
    let块级引起的闭包思考
    进程与线程
    angular(^4)-监控表格按键行为的问题
  • 原文地址:https://www.cnblogs.com/u3shadow/p/4302493.html
Copyright © 2011-2022 走看看