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

时间: 2024-08-28 02:57:35

关于handler和异步任务的相关文章

Android:用Handler实现异步处理功能

Android:用Handler实现异步处理功能 - 51CTO.COM 一.一个问题 有这样一个问题值得我们思考,若把一些类似于下载的功能(既耗时且不一定有结果)写在Activity(主线程)里,会导致Activity阻塞,长时间无响应,直至页面假死(如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭").因此,我们需要把这些耗时的操作放在单独的子线程中操作.这就是Handler的使命.Handler提供异步处理的功能,发送和接收不是同时的(Activity

Android:Handler实现异步处理功能

一.一个问题 有这样一个问题值得我们思考,若把一些类似于下载的功能(既耗时且不一定有结果)写在Activity(主线程)里,会导致Activity阻塞,长时间无响应,直至页面假死(如果5秒钟还没有完成的话,会收到Android系统的一个错误提示 "强制关闭").因此,我们需要把这些耗时的操作放在单独的子线程中操作.这就是Handler的使命.Handler提供异步处理的功能,发送和接收不是同时的(Activity的主线程和线程队列里的线程是不同的线程,并行进行,互不影响). 二.Han

Android使用自己封装的Http和Thread、Handler实现异步任务

目录结构如下: Http协议的封装: 使用http协议有request和response这两个主要的域,下边是Http协议封装的结构图 (1)HttpRequestInter.java:作为request域对象,应该可以获得客户端请求的地址和httpRequest对象,这样的话才可以获得客户端请求的参数等信息:另外public HttpResponseInter request() throws Exception; 使用这个方法,是当执行完request请求之后,返回一个response对象(

Android异步之Asynctask与Handler面试七问

提出问题: 1.Android中的异步处理方式? 2.如何使用Handler以及在使用过程中如何避免Handler引起的内存泄露? 3.从源码角度分析MessageQueue,Message,handler,looper,主线程,子thread之间的关系 4.Handler通过sendMessage以及post Runable对象有什么区别 5.如何给一个线程建立消息循环,即如何构建一个looper线程? 6.Asynctask中有哪些方法,分别如何使用,哪些方法在主线程执行,哪些方法在子线程执

多线程异步机制Handler以及AsyncTask

Android当中多线程的写法跟JAVA当中相差不了太多,只需要新建一个类继承自Thread类即可.然后重写父类的run方法.并在里面写耗时逻辑即可 class MyThread extends Thread { @Override public void run() { // 处理具体的逻辑 } } 启动线程 new MyThread().start(); 当然也可以像下面这样写,这样的写法更加适合,因为使用继承的方式耦合性有点高 class MyThread implements Runna

Android:异步处理之Handler+Thread的应用(一)

前言 很久很久以前就听说了,每一个android的应用程序都会分别运行在一个独立的dalvik虚拟机进程中,而在每个虚拟机在启动时会运行一个UI主线程(Main Thread),而为啥叫UI主线程而不是AI主线程或者是BI主线程呢?因为它要处理全部和UI相关的事件:因为Android系统采用的是UI单线程模型,只能由UI主线程对其进行UI操作,如果子线程抱着众人拾柴火焰高的觉悟来帮忙UI主线程更新UI界面的话,对不起哦~Android系统就会报错的.粗俗点讲就是:我们只能通过UI主线程来蹂躏UI

深入探讨Android异步精髓Handler

深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onLayout源码详尽分析 自定义View系列教程04–Dra

Android ------ handler 异步处理消息

Handler基本概念: Handler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分逐个的在消息队列中将消息取出,然后对消息进行出来,就是发送消息和接收消息不是同步的处理. 这种机制通常用来处理相对耗时比较长的操作. Handler 常用方法: post(Runnable) postAtTime(Runnable,long) postDelayed(Runnable long) sendEmptyMessage(int) sendMes

Android开发之异步消息处理机制Handler

Android中的异步消息处理主要有四个部分组成,Message, Handler, MessageQueue和 Looper. 1.Message. 在线程之间传递的消息,可以内部携带少量的信息,用于在不同线程之间交换数据.可以使用what字段,arg1和arg2携带一些整型数据,obj字段携带一个object对象. 2.Handler. Handler,处理者的意思,它主要用于发送和处理消息的.发送消息一般使用Handler的sendMessage()方法,而发出的消息经过一系列地辗转处理后