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

    -----人若无名,则可专心练剑
  • 相关阅读:
    将各种简单算法组合,使自己更加灵活的使用它
    转载 原反补码
    迭代器是神马东西
    进程 线程
    STL中的容器是如何实现的,如何存储的
    可以实例化对象,但是不能被继承的类
    float的存储及和int的转化
    对批处理、多道操作系统的理解
    STL set、map实现为什么要以红黑树为底层实现机制?
    c 多线程
  • 原文地址:https://www.cnblogs.com/u3shadow/p/4302493.html
Copyright © 2011-2022 走看看