Android中AsyncTask的用法示例
2015-07-22 23:05
507 查看
AsyncTask是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。
params启动任务执行的输入参数,比如HTTP请求的URL。
progress后台任务执行的百分比。
result后台执行任务最终返回的结果,比如String。
doInBackground(Params…)后台执行,比较耗时的操作可以放在这里。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
onPostExecute(Result)相当于Handler处理UI的方式,在这里可以使用在doInBackground得到的结果处理操作UI。此方法在主线程执行,任务执行的结果作为方法的参数返回。
main.xml
MainActivity
NetOperator 用于模拟网络环境
写一个继承自AsyncTask的类–ProgressBarAsyncTask。
要使用AsyncTask工作我们要提供三个泛型参数,并重载几个方法(至少重载一个)。 AsyncTask定义了三种泛型类型params,progress和result。
params启动任务执行的输入参数,比如HTTP请求的URL。
progress后台任务执行的百分比。
result后台执行任务最终返回的结果,比如String。
一个异步加载数据最少要重写以下两个方法:
doInBackground(Params…)后台执行,比较耗时的操作可以放在这里。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
onPostExecute(Result)相当于Handler处理UI的方式,在这里可以使用在doInBackground得到的结果处理操作UI。此方法在主线程执行,任务执行的结果作为方法的参数返回。
一个简单的AsyncTask的例子。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textView01" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ProgressBar android:id="@+id/progressBar02" android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" /> <Button android:id="@+id/button03" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="更新progressbar" /> </LinearLayout>
MainActivity
public class MainActivity extends Activity { private Button button; private ProgressBar progressBar; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button03); progressBar = (ProgressBar) findViewById(R.id.progressBar02); textView = (TextView) findViewById(R.id.textView01); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView, progressBar); asyncTask.execute(1000); } }); } }
NetOperator 用于模拟网络环境
//模拟网络环境 public class NetOperator { public void operator(){ try { //休眠1秒 Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
写一个继承自AsyncTask的类–ProgressBarAsyncTask。
public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> { private TextView mTextView; private ProgressBar mProgressBar; public ProgressBarAsyncTask(TextView textView, ProgressBar progressbar) { this.mTextView = textView; this.mProgressBar = progressbar; } /* 这里的s就是doInBackground函数返回的 */ @Override protected void onPostExecute(String s) { mTextView.setText("结束" + "s=" + s); } /* doInBackground执行前将执行该函数 */ @Override protected void onPreExecute() { mTextView.setText("正在执行中"); } /* 执行主要的耗时操作 */ @Override protected String doInBackground(Integer... params) { int result = 0; NetOperator netOperator = new NetOperator(); for (int i = 0; i < 10; i++) { netOperator.operator(); result += 10; publishProgress(result);//这里会调用onProgressUpdate()函数对progressbar进行更新 } return result + ""; } /* progressbar更行的函数 */ @Override protected void onProgressUpdate(Integer... values) { int value = values[0]; mProgressBar.setProgress(value); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories