zoukankan      html  css  js  c++  java
  • Android中AsyncTask使用

    一、AsyncTask的定义

    AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程,并在主线程更新UI。

    从实现上来说,AsyncTask封装了Thread和Handler,通过AsyncTask可以很方便执行后台任务以及在主线程中访问UI。

    AsyncTask是一个抽象的泛型类,它提供了Params、Progress和Result这三个泛型参数

    public abstract class AsyncTask<Params,Progress,Result>

    AsyncTask三个泛型参数:

    》Params,任务的输入参数类型;

    》Progress,任务执行进度的参数类型。

    》Result,任务返回结果的参数类型。

    如果AsyncTask确实不需要传递具体的参数,那么这三个泛型参数可以用Void来代替。

    二、AsyncTask的4个核心方法:

    1、onPreExecute()

    在任务开始后立即调用,在UI线程执行。这一步通常用于设置任务,例如在用户界面中初始化进度条。


    2、doInBackground(Params...)

    在后台线程池中执行,可能会花费很长时间;可以通过publishProgress方法来更行任务的进度,publishProgress方法会调用onProgressUpdate方法;此方法还需要返回结果给onPostExecute方法。


    3、onProgressUpdate(Progress...)

    在UI线程上执行。这种方法是用来显示用户进度界面,后台进程仍在执行。例如,它可用于显示一个进度条或在文本中显示日志。


    4、onPostExecute(Result)

    在UI线程上执行。后台进程的结果被传递到这一步作为参数。

    常用的写法如下:

    class MyTask extends AsyncTask<String, Integer, String> {
    
        @Override
        protected String doInBackground(String... params) {
            //执行异步任务
            int n = 10;
            //调用publishProgress公布进度,最后onProgressUpdate方法将被执行
            publishProgress(n);  
            Thread.sleep(500);    
            return null;
        }
    
        @Override
        protected void onPostExecute(String result) {
            //更新UI,显示结果
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            //更新进度信息
        }

     任务调用的代码:

    new MyTask().execute();//执行任务

    三、AsyncTask的规则:

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

    2、execute(Params... params)方法必须在UI线程中调用。

    3、不要手动调用onPreExecute,doInBackground,onProgressUpdate,onPostExecute这些方法

    4、一个AsyncTask实例只能执行一次(只能调用一次execute方法),如果执行第二次将会抛出异常

  • 相关阅读:
    更博不能忘——webpack学习笔记
    面试中遇到过的闭包~
    github踩坑之git命令收集与整理(windows)
    应该写个博客
    重学C语言(一):熟悉汇编语言
    关于Swift的闭包(closure)以及其在可选(Optional)类型中的应用
    解决Xcode 7出现cdtool cannot compile的问题(2015年8月12日更新)
    更改LaTeX的数学模式中使用的字体
    在Mac下安装使用支持中文的LaTeX(二)
    在Mac下安装使用支持中文的LaTeX(一)
  • 原文地址:https://www.cnblogs.com/pear-lemon/p/4831582.html
Copyright © 2011-2022 走看看