异步任务AsyncTask的简单理解
来源:互联网 发布:国际象棋软件哪个好 编辑:程序博客网 时间:2024/05/21 22:34
异步任务AsyncTask的简单理解
参考资料:《疯狂android讲义》
参考博客:http://blog.csdn.net/wxg630815/article/details/7003812
前言
为了避免UI线程失去响应的问题,android建议将耗时操作放进新线程中完成,但是新线程可能也需要动态更新UI组件,也许你会说可以使用Hanlder来解决这个问题,但是这里我刚学到了异步任务(AsyncTask)的做法,可以进一步简化这个操作。
AsyncTask(Params, progress,Result)
AsyncTask(Params, progress,Result)是一个抽象类,通常用于被继承,继承AsyncTask是需要指定如下三个泛型参数:
- Params:启动任务执行的输入参数的类型。
- Progress:后台任务完成的进度值的类型。
- Result:后台执行任务完成后返回结果的类型。
使用AsyncTask只需要如下三步即可:
- 创建AsyncTask的子类,为三个泛型参数指定类型,不需要指定类型的将他指定为viod类型就可以了。
- 根据需要实现AsyncTask的如下方法:
- doInBackound(Params…):重写该方法就是后台线程需要完成的任务。该方法可以调用publicProgress(Progress… values)方法更新任务执行进度。
- onProgressUpdate(Progress… values):在doInBackound()方法中调用publicProgress(Progress… values)方法更新任务进度后会触发该方法。
- onPreExexute():该方法将在执行后台耗时操作前被调用,通常用于完成一些初始化的准备工作,比如在界面上显示进度条等等。
- onPostExecute(Result result):当doInBackound()完成后,系统会自动调用该方法,将doInBackound()的返回值传给该方法。
- 调用AsyncTask子类的实例execute(Params… params)开始执行耗时任务
说了这么多不如几行代码说的清楚,下面献上代码Demo:
public class MyActivity extends Activity{ private Button btn; private TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button) findViewById(R.id.start_btn); tv = (TextView) findViewById(R.id.content); btn.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { update(); } }); } private void update(){ UpdateTextTask updateTextTask = new UpdateTextTask(this); updateTextTask.execute();//开始执行耗时任务 } class UpdateTextTask extends AsyncTask<Void,Integer,Integer>{ private Context context; UpdateTextTask(Context context) { this.context = context; } /** * 运行在UI线程中,在调用doInBackground()之前执行 */ @Override protected void onPreExecute() { Toast.makeText(context,"开始执行",Toast.LENGTH_SHORT).show(); } /** * 后台运行的方法,可以运行非UI线程,可以执行耗时的方法 */ @Override protected Integer doInBackground(Void... params) { int i=0; while(i<10){ i++; publishProgress(i); try { Thread.sleep(1000); } catch (InterruptedException e) { } } return null; } /** * 运行在ui线程中,在doInBackground()执行完毕后执行 */ @Override protected void onPostExecute(Integer integer) { Toast.makeText(context,"执行完毕",Toast.LENGTH_SHORT).show(); } /** * 在publishProgress()被调用以后执行,publishProgress()用于更新进度 */ @Override protected void onProgressUpdate(Integer... values) { tv.setText(""+values[0]); } }}
这是一个很简单的小程序,旨在让我们更加深刻的理解异步任务的工作过程。
0 0
- 关于AsyncTask-异步任务的简单理解
- 异步任务AsyncTask的简单理解
- 简单的异步任务AsyncTask
- AsyncTask --异步任务+简单的网络图片下载
- 深入理解异步任务AsyncTask
- Android中异步任务机制AsyncTask的理解
- Android 异步任务AsyncTask类的简单使用
- Android中的AsyncTask异步任务的简单介绍
- Android中的AsyncTask异步任务的简单实例
- 异步任务AsyncTask的Demo
- 异步任务AsyncTask的使用
- android的异步任务AsyncTask
- AsyncTask异步任务的使用
- AsyncTask的使用方法(异步任务的处理)
- 搜索文件的异步任务 new AsyncTask
- AsyncTask(异步任务)的用法
- AsyncTask的缺陷-异步多任务
- 关于异步任务AsyncTask的解析
- 《Android源码设计模式解析与实战》读书笔记(十一)——命令模式
- iFunk执政官游戏本,不仅仅是游戏本
- python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例
- FIO组数据测试脚本
- Lomper 每天进步一点点~~ QT学习之QString的arg方法
- 异步任务AsyncTask的简单理解
- 算法导论 红黑树(附带黑高度)
- 手把手教你申请邓白氏编码
- Android 搜索页-搜索历史条目动态添加(LinearLayout动态添加条目)
- 快速安装node环境: n
- mongodb的一些命令操作
- IntellJ Idea 搭建SpringMVC项目
- 基础的python抓取网站图片的例子
- 欢迎使用CSDN-markdown编辑器