zoukankan      html  css  js  c++  java
  • AsyncTask简单入门

    关系:

    java.lang.Object
       ↳    android.os.AsyncTask<Params, Progress, Result>

    概述:

    AsyncTask是Android提供的轻量级异步类;它在后台线程处理耗时的操作然后能够将处理的结果返回给UI线程处理。因为它不涉及到使用Thread和Handler所以简单易用。

    使用方法:

    首先上一段Android Developer的代码:
     private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
         protected Long doInBackground(URL... urls) {
             int count = urls.length;
             long totalSize = 0;
             for (int i = 0; i < count; i++) {
                 totalSize += Downloader.downloadFile(urls[i]);
                 publishProgress((int) ((i / (float) count) * 100));
                 // Escape early if cancel() is called
                 if (isCancelled()) break;
             }
             return totalSize;
         }
     
         protected void onProgressUpdate(Integer... progress) {
             setProgressPercent(progress[0]);
         }
     
         protected void onPostExecute(Long result) {
             showDialog("Downloaded " + result + " bytes");
         }
    }
    //运行方式
    //new DownloadFilesTask().execute(url1, url2, url3);
    以下我们看一下详细的使用方法。

    1.构建一个类继承AsyncTask

    须要注意的是AsyncTask的三中泛型类型
            Params 启动任务运行的输入參数,比方HTTP请求的URL。
            Progress 后台任务运行的百分比。
            Result 后台运行任务终于返回的结果,比方String。 

    2.至少实现​ doInBackground (Params... params)这种方法

    让我们看一下doInBackground这种方法。
    protected abstract Result doInBackground (Params... params)
    它接收类型为Params的若干參数,然后返回类型为Result的结果。

    3.一般还会实现至少一个 onPostExecute (Result result)方法

    protected void onPostExecute (Result result)
    它在doInBackground之后被运行,參数就是doInBackground返回的结果。

    The 4 steps:

    1.onPreExecute()

    在AsyncTask被execute之前被运行,通常是做一些准备工作

    2.doInBackground(Params...)

    在onPreExecute()运行完之后运行,后台线程运行耗时操作

    3.onProgressUpdate(Progress...)

    在UI线程中运行。在 publishProgress(Progress...)被调用之后运行

    4.onPostExecute(Result)

    在UI线程中运行,在doInBackground()运行之后运行

    Tips:

    1.AsyncTask须要在UI线程中载入
    2.构建AsyncTask的子类须要在UI线程中
    3.execute方法须要在UI线程中被调用
    4.对于"The 4 steps"中的四个函数不要自己手动去调用
    5.每一个task对象仅仅能被execute一次,不然会报异常



  • 相关阅读:
    svn实现共享文件夹/文件或svn文件夹/文件链接
    插件的“动态替换”
    Swagger启动报错 swagger error creating bean with name documentationPluginsBoostrapper
    观察者模式的几种实现
    python flask 蓝图 多模块开发
    免安装版nginx,启动报错如下:./sbin/nginx: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
    IDEA 支持JDK1.8的-parameters
    电脑自动开机+自动输入密码
    【小练习】立方体旋转
    消除if...else的十种方法
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4253535.html
Copyright © 2011-2022 走看看