一个AsyncTask的替代方案—AsyncTaskScheduler

详细解读AsyncTask的黑暗面以及一种替代方案介绍了AsyncTask的一些注意事项以及存在的问题,参照AsyncTask写了一个库AsyncTaskScheduler

特点

  • 默认多个任务并行处理。
  • 执行单个任务无需使用线程池。
  • 支持自定义线程池。
  • 支持错误处。
  • 多个任务的管理管理方便。
  • 支持任何线程处使用,结果都会在UI线程处理。

方法介绍

很多方法都是和AsyncTask类似。

  • doInBackground
  • onProgressUpdate
  • onExecuteSucceed
  • onExecuteCancelled
  • onExecuteFailed
    发生异常时回调

使用

1.单个任务——是在单个线程里执行,不需要线程池。

SingleAsyncTask singleTask = new SingleAsyncTask<Void,String>() {   
    @Override    
    public String doInBackground() {   
        return null;   
    }
   @Override
   public void onExecuteSucceed(String result) {      
       super.onExecuteSucceed(result);      
   }
   @Override
   public void onExecuteFailed(Exception exception) {      
       super.onExecuteFailed(exception);    
       Log.i(TAG,"onExecuteCancelled:"+exception.getMessage()+Thread.currentThread());
   }
};
singleTask.executeSingle();

//取消通过executeSingle执行的任务
 mSingleAsyncTask.cancel(true);

2.多个任务

//多个任务新建一个任务调度器
AsyncTaskScheduler mAsyncTaskScheduler = new AsyncTaskScheduler();

SingleAsyncTask singleTask1 = new  SingleTask() { ... };
SingleAsyncTask singleTask2 = new  SingleTask() { ... };
SingleAsyncTask singleTask3 = new  SingleTask() { ... };
...

//并行执行多个任务
mAsyncTaskScheduler.execute(singleTask1)
.execute(singleTask2).execute(singleTask3).

//设置默认的线程池
Executor defaultPoolExecutor = ...
AsyncTaskScheduler mAsyncTaskScheduler = new AsyncTaskScheduler(Executor defaultPoolExecutor);

 //取消通过AsyncTaskScheduler任务
mAsyncTaskScheduler.cancelAllTasks(true);

3.确保正确的取消任务以防止避免内存泄露或其他问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android Handler机制系列文章整体内容如下: Android Handler机制1之ThreadAnd...
    隔壁老李头阅读 8,512评论 1 15
  • 在Android中我们可以通过Thread+Handler实现多线程通信,一种经典的使用场景是:在新线程中进行耗时...
    吕侯爷阅读 6,243评论 2 23
  • AsyncTask 1.简介 AsyncTask允许你执行后台耗时操作,并将结果发布到UI线程。整个实现过程不需要...
    chewbee阅读 5,227评论 0 1
  • Android开发者:你真的会用AsyncTask吗? 导读.1 在Android应用开发中,我们需要时刻注意保证...
    cxm11阅读 7,591评论 0 29
  • 当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux...
    小芸论阅读 5,667评论 0 12