AsyncTask_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > AsyncTask

AsyncTask

 2017/9/6 13:09:00  钻石VIP  程序员俱乐部  我要评论(0)
  • 摘要:AsyncTask相当于对handle的封装,可以更方便我们在子线程和主线程中传递数据。并且因为AsyncTask中采用线程池机制,所以速度比handle快。AsyncTask写成内部类,我们就可以调用主线程里面的变量,例如后面onProgressUpdate来更新activity就需要主线程里面的变量。AsyncTask中我们被重写的方法一般三个:onPreExecute、doInBackground、onPostExecuteonPreExecute最先被执行,用来加载对话框什么的
  • 标签:

AsyncTask

相当于对handle的封装,可以更方便我们在子线程和主线程中传递数据

并且因为AsyncTask中采用线程池机制,所以速度比handle快。

AsyncTask写成内部类,我们就可以调用主线程里面的变量,例如后面onProgressUpdate来更新activity就需要主线程里面的变量。

AsyncTask中我们被重写的方法一般三个:onPreExecute、doInBackground、onPostExecute

 

onPreExecute最先被执行,用来加载对话框什么的,提示用户我们下面要进行耗时操作了。

doInBackground我们在这一部分里面执行耗时的操作,比如说网络访问。

onPostExecute在doInBackground方法后面执行,可以用获取到的网络数据更新activity,result参数就是用来传结果数据的。

 

比如现在改变需求:

我们要下载一个很大的东西,比如王者荣耀,所以我们要给用户显示我们的下载进度。

这个时候可以在doInBackground中添加publishProgress方法,publishProgress方法会去调用AsyncTask重写的onProgressUpdate方法,

我们可以在onProgressUpdate方法中去更新进度条。

AsyncTask中的progress参数就是做这个用的。

 1 package com.example.asynctask;
 2 
 3 import android.app.Activity;
 4 import android.os.AsyncTask;
 5 import android.os.Bundle;
 6 import android.util.Log;
 7 import android.widget.TextView;
 8 
 9 public class MainActivity extends Activity {
10     private TextView tv_text;
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16         tv_text = (TextView) findViewById(R.id.tv_text);
17         
18         MyAsyncTask task=new  MyAsyncTask();
19         //执行
20         task.execute("www.baidu.com");
21     }
22 
23     class MyAsyncTask extends AsyncTask<String,Integer, String> {
24         /**
25          * 被主线程执行,在doInBackground函数前执行
26          * */
27         @Override
28         protected void onPreExecute() {
29             // 弹加载对话框
30             Log.d("bh", "onPreExecute");
31         }
32 
33         /**
34          * 被子线程执行,用来处理耗时行为
35          * */
36         @Override
37         protected String doInBackground(String... params) {
38             Log.d("bh", "doInBackground:"+params[0]);
39             for(int i=1;i<=100;i++){
40                 try {
41                     Thread.sleep(1000);
42                     //推送当前的进度
43                     publishProgress(i);
44                 } catch (InterruptedException e) {
45                     e.printStackTrace();
46                 }
47             }
48             return null;
49         }
50         @Override
51         protected void onProgressUpdate(Integer... values) {
52             //更新UI上的进度
53             tv_text.setText(values[0]+"");
54         }
55         /**
56          * 被主线程执行,在doInBackground函数后执行
57          * */
58         @Override
59         protected void onPostExecute(String result) {
60             Log.d("bh", "onPostExecute");
61             // 更UI数据
62             tv_text.setText(result);
63         }
64     }
65 }

 

上一篇: AsyncTask2 下一篇: 王垠:商业计划
  • 相关文章
发表评论
用户名: 匿名