医学教育网站建设方案,福建建设工程环保备案网站入口,redis 移动 wordpress,一个人做网站好做吗AsyncTask是一个抽象类#xff0c;我们在使用时需要定义一个它的派生类并重写相关方法。AsyncTask类的声明如下#xff1a;
public abstract class AsyncTaskParams, Progress, Result 我们可以看到#xff0c;AsyncTask是一个泛型类#xff0c;它的三个类型参数的…AsyncTask是一个抽象类我们在使用时需要定义一个它的派生类并重写相关方法。AsyncTask类的声明如下
public abstract class AsyncTaskParams, Progress, Result 我们可以看到AsyncTask是一个泛型类它的三个类型参数的含义如下
ParamsdoInBackground方法的参数类型
ProgressAsyncTask所执行的后台任务的进度类型
Result后台任务的返回结果类型。我们再来看一下AsyncTask类主要为我们提供了哪些方法
onPreExecute() //此方法会在后台任务执行前被调用用于进行一些准备工作 doInBackground(Params… params) //此方法中定义要执行的后台任务在这个方法中可以调用publishProgress来更新任务进度publishProgress内部会调用onProgressUpdate方法 onProgressUpdate(Progress… values) //由publishProgress内部调用表示任务进度更新 onPostExecute(Result result) //后台任务执行完毕后此方法会被调用参数即为后台任务的返回结果 onCancelled() //此方法会在后台任务被取消时被调用
以上方法中除了doInBackground方法由AsyncTask内部线程池执行外其余方法均在主线程中执行。
2. AsyncTask的局限性
AsyncTask的优点在于执行完后台任务后可以很方便的更新UI然而使用它存在着诸多的限制。先抛开内存泄漏问题使用AsyncTask主要存在以下局限性
在Android 4.1版本之前AsyncTask类必须在主线程中加载这意味着对AsyncTask类的第一次访问必须发生在主线程中在Android 4.1以及以上版本则不存在这一限制因为ActivityThread代表了主线程的main方法中会自动加载AsyncTask AsyncTask对象必须在主线程中创建 AsyncTask对象的execute方法必须在主线程中调用 一个AsyncTask对象只能调用一次execute方法 使用例子及说明 class MyAsyncTask extends AsyncTaskString,Integer,String {Overrideprotected void onPreExecute() {super.onPreExecute();Log.i(lgq,ssssonPreExecute);}Overrideprotected void onCancelled() {//取消该线程方法 myAsyncTask.cancel(false);super.onCancelled();Log.i(lgq,ssssonCancelledddd);}Overrideprotected void onProgressUpdate(Integer... values) {//进度条回调方法super.onProgressUpdate(values);//通过publishProgress方法传过来的值进行进度条的更新.
// progressBar.setProgress(values[0]);Log.i(lgq,ssssvalues[0]);}Overrideprotected void onPostExecute(String aVoid) {//doInBackground结果回调方法super.onPostExecute(aVoid);Log.i(lgq,........aVoid);}Overrideprotected String doInBackground(String... params) {//参数类型是AsyncTask最后一个参数类型//使用for循环来模拟进度条的进度.for (int i 0;i 100; i ){//调用publishProgress方法将自动触发onProgressUpdate方法来进行进度条的更新.
// ab;publishProgress(i);//加载进度条方法try {//通过线程休眠模拟耗时操作Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}return params[0];}}
启动AsyncTask MyAsyncTask myAsyncTask;
myAsyncTask new MyAsyncTask();
myAsyncTask.execute(ssssw232e3);//这个参数会传递到doInBackground里面类型后面三个点(String…)是从Java 5开始Java语言对方法参数支持一种新写法叫可变长度参数列表
在使用的时候对于test(String…strings)你可以直接用test()去调用标示没有参数也可以用去test(“aaa”)也可以用test(new String[]{“aaa”,”bbb”})。 doInBackground(String... params)onProgressUpdate(Integer... values)参数都是数组类型