AsyncTask使用

原创 2016年08月29日 19:42:15

在自己项目中,每当有耗时操作就是创建新的线程, 几乎忘记Android 还有自带异步线程工具AsyncTask ,其中底层已经用线程池管理线程,不用我们考虑线程的管理问题, 实际把其写到基类中

public class BaseActivity  extends AppCompatActivity{

    protected List<AsyncTask<Void, Void, Boolean>> myAsyncTasks = new ArrayList<AsyncTask<Void, Void, Boolean>>();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    /**
     * 添加异步任务到数组中
     *
     * @param asyncTask
     */
    public void putAsyncTask(AsyncTask<Void, Void, Boolean> asyncTask) {
        myAsyncTasks.add(asyncTask.execute());
    }

    /**
     * 清除所有的异步任务
     */
    protected void clearAsyncTask() {
        Iterator<AsyncTask<Void, Void, Boolean>> iterator = myAsyncTasks
                .iterator();

        while (iterator.hasNext()) {
            AsyncTask<Void, Void, Boolean> asyncTask = iterator.next();

            if (asyncTask != null && !asyncTask.isCancelled()) {
                asyncTask.cancel(true);
            }
        }

        myAsyncTasks.clear();
    }

    @Override
    protected void onDestroy() {
        clearAsyncTask();
        super.onDestroy();
    }
}

当使用时调用 

private void search() {
    putAsyncTask(new AsyncTask<Void, Void, Boolean>() {
        @Override
        protected Boolean doInBackground(Void... params) {
            try {
                // TODO: 耗时操作
            } catch (Exception e){
                return false;
            }
            return true;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            if(aBoolean){
                // TODO: 更新UI
            }else {
                Toast.makeText(MainActivity.this,"查询失败",Toast.LENGTH_LONG).show();
            }
            super.onPostExecute(aBoolean);
        }
    });
}




Android之AsyncTask的使用(二)之文件下载

声明: 本人菜鸟一枚, 本博客是本人自学的内容, 适用于初学者, 不喜勿喷, 谢谢大家下载案例 AsyncTask准则 通过上一篇博客我们学习到了AsyncTask的主要作用, 那今天就写一个实际...
  • u013144863
  • u013144863
  • 2016年07月07日 22:41
  • 1318

Android 结合实例学会AsyncTask的用法

doInBackground方法的形参对应的是AsyncTask的第一个参数,即参数类型要相同
  • dadaxiaoxiaode
  • dadaxiaoxiaode
  • 2014年07月31日 20:01
  • 6856

AsyncTask你真的用对了吗?

在之前的文章深入探究了Handler,《从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)》我们知道了Android的消息机制主要靠H...
  • ly502541243
  • ly502541243
  • 2016年08月26日 16:40
  • 7662

AsyncTask的正确使用

目前项目中使用了大量的异步任务(AsyncTask)来处理后台接口的数据(执行网络操作)。有时候网络比较慢或者执行长时间的网络的时候(长时网络不建议使用AsyncTask),用户返回当前的Activi...
  • anhenzhufeng
  • anhenzhufeng
  • 2016年04月15日 16:19
  • 925

Android异步加载学习笔记之三:用AsyncTask实现ListView中的图片数据加载

前面的笔记Android异步加载学习笔记之一:用AsyncTask加载服务器json数据和笔记 Android异步加载学习笔记之二:实现ListView中的图片数据从网络加载中有一点小错误,如果给大家...
  • true100
  • true100
  • 2015年08月11日 18:59
  • 883

解决AsyncTask的线程池限制问题

这是一篇我个人在EOE发的帖子《解决AsyncTask的线程池限制问题》,由于eoe的blog系统实在是无言以对,我就把eoe上面的帖子以及blog是都转到csdn上来,原帖地址:http://www...
  • lsmfeixiang
  • lsmfeixiang
  • 2014年12月28日 13:05
  • 1375

Android应用AsyncTask处理机制详解及源码分析

【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果】1 背景Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知...
  • yanbober
  • yanbober
  • 2015年05月28日 16:02
  • 8285

02_AsyncTask泛型含义

AsyncTask的泛型含义     泛型含义   private class MyAsyncTask extends AsyncTask {} 我们刚刚说了有三个泛型的 Void,Vo...
  • qq_33781658
  • qq_33781658
  • 2016年04月11日 22:04
  • 621

AsyncTask与MVP模式

AsyncTask是一种轻量级的异步任务类,可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI,但并不适合进行特别耗时的任务 1 AsyncTask的类必...
  • weixin_38032755
  • weixin_38032755
  • 2018年01月12日 14:33
  • 16

Android下的,OOM内存溢出解决方法\AsyncTask

在Android平台上面,应用程序OOM异常永远都是值得关注的问题。通常这一块也是程序这中的重点之一。这下我就如何解决OOM作一点简单的介绍。     首先,OOM就是内存溢出,即Out Of Me...
  • u013812046
  • u013812046
  • 2014年09月19日 22:09
  • 1104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AsyncTask使用
举报原因:
原因补充:

(最多只允许输入30个字)