01_AsyncTask基本使用

AsyncTask的基本使用

 

AsyncTask

 

首先,什么是AsyncTask?

AsyncTask的意思是 异步任务

异步是什么意思呢?

异步就是不在当前的线程,在其他线程进行操作.在同一个线程就是同步.

 

AsyncTask异步任务是用来干什么的呢?

 

我们一般把一些耗时的操作放到子线程中去,因为主线程如果长时间没有响应,系统会提示一个无响应对话框(ANR:Application Not Responding),一般主线程(Activity,Service)5,BroadcastReceiver10.

 

然后我们会在子线程中的runOnUiThread方法中(也就是在主线程)中更新UI.

 

runOnUIThread内部其实使用的也是Handler,所以其实我们之前一直用ThreadHandler两者结合的方式来处理耗时的操作.

 

每次都这么写很麻烦,所以Android给我们提供了一个工具AsyncTask,专门用来处理又有耗时操作又要更新界面的一些需求.

 

 

 

 

 

 

 

 

OK,我们来实践一下

我们在Activity中创建一个类来继承AsyncTask

 

private class MyAsyncTask extends AsyncTask<Void,Void,Void>{

 

}

 

这里AsyncTask会让我们传入3个参数,我们等下再解释,先传入3Void.

 

然后系统会提示实现一个抽象方法,我们实现一下

 

protected Void doInBackground(Void... params){

return null;

}

 

我们发现这个方法的返回类型不是void,而是大写的Void,而且参数是可变参数Void数组.

 

这个doInBackground方法顾名思义就是在后台操作

Background后台的意思其实就是子线程.

我们可以在这个方法中处理耗时操作.

 

 

 

 

我们再来实现一个方法

protected void onPostExecute(Integer... values) {

        super.onPostExecute(values);

}

 

这个方法叫做更新进度,其实就是更新界面UI

 

 

 

 

现在你应该有一些头绪了,没错,这个类就是把耗时操作放到doInBackground方法内,把更新UI的操作方到onPostExecute方法里.

就是这么简单

 

 

 

 

 

 

再补充一点,还有两个方法

protected void onPreExecute(){

super.onPreExecute();

}

 

叫做执行之前,其实就是进行耗时操作之前的一些准备工作,既然是在耗时操作之前,这个方法自然就是在主线程执行

 

 

那么现在三个方法onPreExecute,DoInBackground,onPostExecute,先后分别就是在 主线程,子线程,主线程中执行.

 

 

 

 

我们来举个例子

我们在onProExecute里面new一个ProgressDialog

mPd=new ProgressDialog(MainActivity.this);

mPd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

mPd.show();

 

这样的话就是新建了一个进度条,然后展示

 

然后我们在DoInBackground里面

SystemClock.sleep(5000);

这样是模拟一个最简单的耗时操作,5

 

然后在onPostExecute里面

mPd.dismss();

让进度条消失.

 

 

然后在onCreate方法里面执行异步任务AsyncTask

new MyAsyncTask().execute();

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值