zoukankan      html  css  js  c++  java
  • AsyncTask(异步任务)

    一、为了解决新线程不能更新UI组件的问题,Android提供了如下几种解决方案。

      1)使用Handler实现线程之间的通信;

      2)Activity.runOnUiThread(Runnable);

      3)View.post(Runnable);

      4)View.postDelayed(Runnable,long).

    二、AsyncTask适用于简单的异步处理,不需要借助线程和Handler即可实现。AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask时需要指定如下三个泛型参数。

      1)Params:启动任务执行的输入参数类型

      2)Progress:后台任务完成的进度值的类型

      3)Result:后台执行任务完成后返回结果的类型

    三、实现AsyncTask实现步骤:

      1)创建AsyncTask的子类,并为三个泛型参数指定类型。如果某个泛型参数不需要指定类型,可将它指定为Void。

      2)根据需要,实现AsyncTask的如下方法:

        (1)doInBackground(Params...):重写该方法是后台线程将要完成的任务。该方法可以调用publishProgress(Progress... values)方法更新任务的执行进度。

        (2)onProgressUpdate(Progress.. values):在doInBackground()方法中调用publishProgress()方法更新任务的执行进度后,将会触发该方法。

        (3)onPreExecute():该方法将在执行后台耗时操作前被调用。通常该方法用于完成一些初始化的准备工作,比如在界面上显示进度条等。

        (4)onPostExecute(Result result):当doInBackground()完成后,系统会自动调用0nPostExecute()方法,并将doInbackground()方法的返回值传给该方法。

      3)调用AsyncTask子类的实例的execute(Params... params)开始执行耗时任务。

    四、使用AsyncTask时必须遵守如下规则:

      1)必须在UI线程中创建AsyncTask的实例。

      2)必须在UI线程中调用AsyncTask的execute()方法。

      3)AsyncTask的onPreExecute()、onPostExecute(Result result)、doInBackground(Params...)、onProgressUpdate(Progress.. values)方法,不应该由程序员代码调用,而是由Android系统负责调用。

      4)每个AsyncTask只能被执行一次,多次调用将会引发异常。

  • 相关阅读:
    在路上。。。
    DNN模块打包(DNN-ModulePack简称为DNNMP)
    创建一个PortalSettings,这也行。
    对Web 2.0 的体验
    太空旅客 第七位 了
    计划今年每月至少写一篇技术性文章
    检索 COM 类工厂中 CLSID 为 {0002450000000000C000000000000046} 的组件时失败,原因是出现 以下错误: 80070005
    RadGrid RaisePostBackEvent 刷新页面问题。
    做为团队中的一员
    dnn captcha 图片 显示不了 见鬼了
  • 原文地址:https://www.cnblogs.com/FlySheep/p/3967249.html
Copyright © 2011-2022 走看看