zoukankan      html  css  js  c++  java
  • Android AsyncTask学习

    Android程序有UI进程和后台进程,在执行一些耗时的操作时,如果在UI进程中,很可能出现假死的情况,用户体验会受到影响,因此,那些耗时进程往往就放在了后台进程中,用户体验能更好一些。网络情况不稳定,在向服务器请求数据时,也许要用到后台进程(Android4.0以后强制不能再主线程中访问网络),也可能用到AsyncTask,后面会介绍AsyncTask与Handler的区别,进行一下对比。

    AsyncTask是一个抽象类(abstract class)是一个后台任务类,异步执行。

    public abstract class AsyncTask<Params, Progress, Result>

    AsyncTask继承自Object,在后台运行,结果在UI进程上发布。

    异步任务被定义为三个泛型:

    Params:启动任务执行的输入参数,如url

    Progress:后台任务执行的百分比

    Result:后台执行任务的最终结果

    执行的四个步骤:

    onPreExecute():在doInBackground方法前执行,可以显示对话框显示进度(ProgressDialog)。

    doInBackground(Params…):后台执行耗时、网络访问任务,过程中可以调用publicPregress(Progress… values)更新任务进度。

    onProgressUpdate(Progress…):主线程执行,显示任务执行的进度,可以增加进度条增加用户体验度。

    onPostExecute(Result):UI处理方法,在doInBackground中得到的返回值将作为该方法的参数。

    onCancelles():用户调用取消时要做的操作,在cancel()和doInBackground()后执行

    异步加载数据至少重写:doInBackground()和onPostExecute()

    注意:task在UI进程中创建,并在UI进程中使用execute()方法调用启动,task只可以被执行一次,否则抛出异常。

    可以调用cancel(boolean)尝试取消任务执行。

    其中的内部类Status标志当前任务状态:FINISHED(结束),PENDING(还没有开始),RUNING(正在执行),可以调用getStatus()查看当前任务状态。

    AsyncTask与Handler的对比:

    AsyncTask:过程可控,简单快捷;不适用多个异步操作和UI改变

    Handler:结构清晰,功能定义明确,多个任务后台执行时简单清晰;只有一个后台任务时闲的过于复杂。

    Handle:涉及到Handler,Looper,Message,Thread四个对象。实现异步的流程是主线程启动Thread子线程,子线程运行生成Message-Looper。获取Message并传递给Handler,Handler逐个获取Looper中的Message,并进行UI变更。

  • 相关阅读:
    [转载]解决zabbix在configure时候遇到的问题(Ubuntu)
    [转载]ubuntu的版本
    [转载]Nginx如何处理一个请求
    微信小程序—文件系统
    javascript 中 x offsetX clientX screenX pageX的区别
    Bootstrap 框架、插件
    HTML自定义滚动条(仿网易邮箱滚动条)转载
    Vue 组件(上)转载
    vue $mount 和 el的区别
    $on在构造器外部添加事件$once执行一次的事件$off关闭事件
  • 原文地址:https://www.cnblogs.com/renyuzhuo/p/5025584.html
Copyright © 2011-2022 走看看