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);
        }
    });
}




相关文章推荐

使用AsyncTask实现图片下载

  • 2014年08月14日 13:24
  • 1.49MB
  • 下载

AsyncTask基本使用

  • 2015年04月23日 11:18
  • 1.97MB
  • 下载

android使用AsyncTask来实现更新进度条

AsyncTask中有三个参数,如class MyTask extends AsyncTask{}   参数1:向后台任务执行过程方法传递参数的类型   参数2:在后台任务执行过程中,要求主UI线...

Handler与AsyncTask使用示例

  • 2012年10月29日 16:07
  • 311KB
  • 下载

Android asyncTask的使用

  • 2016年03月17日 13:46
  • 3.34MB
  • 下载

AsyncTask使用详解

AsyncTask定义和Handler作用相似,AsyncTask也是为了处理异步任务的。代码操作上AsyncTask比Handler轻量级,但是资源实现上Handler比AsyncTask轻量级。A...

Asynctask异步加载的使用

  • 2016年07月23日 12:51
  • 1.46MB
  • 下载

使用AsyncTask在子线程中更新UI

一、AsyncTask简介 在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的,并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则:  1....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AsyncTask使用
举报原因:
原因补充:

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