• 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方法),如果执行第二次将会抛出异常

  • 相关阅读:
    写程序一定要养成良好习惯程序编码规范
    今天用GRID感觉它严重缺少灵活性
    REPEATER 嵌套
    DATAGRID的困惑。。。
    VB常用函数。。。。
    子父表,就是这么简单。。。。。
    今天解决了DataGrid无刷新全选删除问题。
    看来我还没完全懂DATAGRID。。。
    indexOf 和 lastIndexOf 使用
    javascript 要注意的事项
  • 原文地址:https://www.cnblogs.com/pear-lemon/p/4831582.html
Copyright © 2020-2023  润新知