<Android学习笔记一>——AsyncTask实现
2016-05-18 08:43
417 查看
1、首先介绍一下同步和异步的概念
通俗的来讲:同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。
实现异步任务的方式有很多种,常用的有Handler + Message来实现、使用AsyncTask类、调用runOnUiThread()方法,今天主要介绍AsyncTask异步类的使用。
2、AsyncTask
通常我们需要用一个异步任务的机制解决在子线程里面刷新UI的问题。异步任务类
其中参数的含义为:
Params:是指调用execute()方法时传入的参数类型和doInBackgound()的参数类型。
Progress:是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型。
Result:是指doInBackground()的返回值类型
异步任务类中常用的几个方法:
execute():在UI 线程中调用 ,开始执行这个异步任务。
doInBackground():是继承AsyncTask必须要实现的,运行于后台,耗时的操作可以在这里做。
publishProgress():更新进度,给onProgressUpdate()传递进度参数
onProgressUpdata():在publishProgress()调用完被调用,更新进度
需要注意的地方:
1) Task的实例必须在UI 线程中创建
2) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params…), onProgressUpdate(Progress…)这几个方法,需要在UI线程中实例化这个task来调用。
下面是一个小小的Demo,供理解AsyncTask使用,点击Button,下面的TextView是间隔每秒中产生一个随机数。
结果显示:
通俗的来讲:同步就是发出一个请求后什么事都不做,一直等待请求返回后才会继续做事;异步就是发出请求后继续去做其他事,这个请求处理完成后会通知你,这时候就可以处理这个回应了。
实现异步任务的方式有很多种,常用的有Handler + Message来实现、使用AsyncTask类、调用runOnUiThread()方法,今天主要介绍AsyncTask异步类的使用。
2、AsyncTask
通常我们需要用一个异步任务的机制解决在子线程里面刷新UI的问题。异步任务类
AsyncTask<Params,Progress,Result>,是一个抽象类,继承它时,必须实现相应的方法。
其中参数的含义为:
Params:是指调用execute()方法时传入的参数类型和doInBackgound()的参数类型。
Progress:是指更新进度时传递的参数类型,即publishProgress()和onProgressUpdate()的参数类型。
Result:是指doInBackground()的返回值类型
异步任务类中常用的几个方法:
execute():在UI 线程中调用 ,开始执行这个异步任务。
doInBackground():是继承AsyncTask必须要实现的,运行于后台,耗时的操作可以在这里做。
publishProgress():更新进度,给onProgressUpdate()传递进度参数
onProgressUpdata():在publishProgress()调用完被调用,更新进度
需要注意的地方:
1) Task的实例必须在UI 线程中创建
2) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params…), onProgressUpdate(Progress…)这几个方法,需要在UI线程中实例化这个task来调用。
下面是一个小小的Demo,供理解AsyncTask使用,点击Button,下面的TextView是间隔每秒中产生一个随机数。
package com.example.xiaofeng1015.asycntask; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.util.Random; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btnStart; private TextView textView; // 定义一个异步任务 private MyAsycnTask myAsycnTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnStart = (Button) findViewById(R.id.btnStart); textView = (TextView) findViewById(R.id.tv01); myAsycnTask = new MyAsycnTask(); btnStart.setOnClickListener(this); } @Override public void onClick(View v) { // 开启异步任务,也可doInBackground函数中传递数据 myAsycnTask.execute(); } class MyAsycnTask extends AsyncTask<Integer, Integer, String> { // 工作于UI线程中,用于界面的更新 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); int value = values[0]; // 更新UI界面 textView.setText(Integer.toString(value)); } // 首先启动的后台程序,在工作线程中执行 @Override protected String doInBackground(Integer... params) { while (true) { // 产生随机数,以当前时间为种子 Random random = new Random(System.currentTimeMillis()); int value = random.nextInt(); // 启动onProgressUpdate函数 publishProgress(value); try { // 延迟1s Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
结果显示:
相关文章推荐
- android 图片上传到服务器
- Android 关于IPC机制的理解(二)
- 在Android上打造属于自己的Rxjava框架(一)基础篇
- Android Intent最全面的解析
- Android官方开发文档Training系列课程中文版:OpenGL绘图之环境配置
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- Android 制作简易浏览器源码
- Android列表RecyclerView的用法
- Android开发用的名词
- Android Studio Plugin-Translate English to Chinese
- Android Drawable - Bitmap Drawable使用详解(附图)
- Android 屏幕适配方案
- Android 启动模拟器是出现“Failed to allocate memory:8”
- 安卓系统文件夹及其文件解析
- Android快速开发
- Android中Context详解---- 你所不知道的Context
- Android下自适应屏幕
- Android中使用commons-codec-1.x 出错解释
- Android多渠道打包这样做才酸爽!?
- android布局 parent