美文网首页Android知识
一个AsyncTask的替代方案—AsyncTaskSchedu

一个AsyncTask的替代方案—AsyncTaskSchedu

作者: SilenceDut | 来源:发表于2016-07-24 00:08 被阅读862次

    详细解读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.确保正确的取消任务以防止避免内存泄露或其他问题

    相关文章

      网友评论

        本文标题:一个AsyncTask的替代方案—AsyncTaskSchedu

        本文链接:https://www.haomeiwen.com/subject/bujwjttx.html