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更重量级的,只是代码看起来更简洁,所以说是轻量级的

    -----人若无名,则可专心练剑
  • 相关阅读:
    Spark基本架构及原理
    深度剖析Spark分布式执行原理
    Spark的集群管理器
    基于Redis的开源分布式服务Codis
    RabbitMQ 概念
    分布式事务实现
    优酷 视频上传服务
    深入解析Java中volatile关键字的作用
    mysql in查询 结果乱序 引发的思考
    不安装oracle客户端,用plsql连接oracle
  • 原文地址:https://www.cnblogs.com/u3shadow/p/4302493.html
Copyright © 2011-2022 走看看