Android 高级应用开发第四章---AsyncTask
2018-03-12 22:49
513 查看
**Android 高级应用开发第四章---AsyncTask**
一.什么是AsyncTask?
1.AsyncTask是Android提供的轻量级(实现代码量少)的异步类。
2.为了降低异步通信的开发难度,提供了AsyncTask。
3.AsyncTask直接继承于object类,位于android.os包中。
4.使用AsyncTask可以忽略Looper、MessageQueue、Handler等复杂对象,更便捷的完成异步耗时操作。
二.如何使用AsyncTask?
1.新建内部类继承AsyncTask。
2.定义AsyncTask的三种泛型参数。
3.重写doInBackground抽象方法。
4.重写onPreExecute方法。
5.重写onProgressupdate方法。
6.重写onPostExecute方法。
7.在需要启动的地方调用execute方法。
三.使用AsyncTask做倒计时(附代码)
1.
//在xml布局文件中 <EditText android:id="@+id/main2_edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入数字"/> <Button android:id="@+id/main2_downbtn" android:layout_width="match_parent" android:layout_height="60dp" android:text="开始"/>
//在Activity中 public class Main2Activity extends AppCompatActivity { private TextView textView; private EditText editText; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); bindID(); //设置监听 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int time = Integer.parseInt(editText.getText().toString()); new Mytask().execute(time);//将字符串强制转换成整型 } }); } private void bindID() { textView = findViewById(R.id.main2_text); editText = findViewById(R.id.main2_edit); button = findViewById(R.id.main2_downbtn); } //创建内部类继承AsyncTask class Mytask extends AsyncTask<Integer, Integer, String> { //进行耗时操作前,调用此方法 @Override protected void onPreExecute() { super.onPreExecute(); } //进行耗时操作(在子线程中) @Override protected String doInBackground(Integer... integers) { for (int i =integers[0]; i >=0; i--) { try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { e.printStackTrace(); } } return "结束"; } //得到进度设置控件进度,更新UI @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); textView.setText(values[0]+""); } //进行耗时操作后调用此方法 @Override protected void onPostExecute(String s) { super.onPostExecute(s); textView.setText(s); } } }
**四.使用AsyncTask做进度条(附代码)** 1. //在xml布局文件中 <SeekBar android:id="@+id/main_bar1" android:layout_width="match_parent" android:layout_height="40dp" /> <Button android:id="@+id/main_btn1" android:layout_width="match_parent" android:layout_height="60dp" android:text="1开始下载"/>
2
.//在Activity中 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private SeekBar seekBar1; private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bindID(); } private void bindID() { seekBar1 = findViewById(R.id.main_bar1); button1 = findViewById(R.id.main_btn1); button1.setOnClickListener(this); seekBar1.setMax(10); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.main_btn1: button1.setEnabled(false); new MyTask().execute(); break; } } //创建内部类继承AsyncTask clas 4000 s MyTask extends AsyncTask<Integer,Integer,Integer>{ //进行耗时操作(在子线程中) @Override protected Integer doInBackground(Integer... integers) { for(int i=0;i<=10;i++){ try { Thread.sleep(1000); publishProgress(i); } catch (InterruptedException e) { e.printStackTrace(); } } return 1; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); seekBar1.setProgress(values[0]); } //进行耗时操作后调用此方法 @Override protected void onPostExecute(Integer integer) { super.onPostExecute(integer); button1.setText("下载完成"); button1.setEnabled(true); } } }
五.Execute()和executeOnExecutor有何区别?
executeOnExecutor方法可以并执行多个任务,最多可以5个任务同时执行。而Execute在同时启动多个任务时,将按照先后顺序逐一执行。
六.更喜欢使用AsyncTask还是更喜欢Handler,为什么?
更喜欢使用AsyncTask。因为使用AsyncTask只需要了解3个参数,几个方法即可,代码量小,结构清晰。而Handler需要了解5个参数,代码量大,逻辑较为混乱。
相关文章推荐
- android开发-高级应用、嵌入式底层资料和千人交流群
- Android开发笔记之:AsyncTask的应用详解
- Android高级应用开发(基础篇) - stage3 - 学习笔记
- Android高级应用开发(基础篇) - stage1 - 学习笔记
- Android高级应用开发(基础篇) - stage6 - 学习笔记(中)
- Android应用开发学习笔记之AsyncTask
- android入门视频之Android高级应用开发-基础篇
- Android高级应用开发(基础篇) - stage9 - 学习笔记
- Android开发:实时处理摄像头预览帧视频------浅析PreviewCallback,onPreviewFrame,AsyncTask的综合应用
- Android高级应用开发(基础篇) - stage5 - 学习笔记
- Android应用开发——使用AsyncTask异步更新UI界面
- Android开发:实时处理摄像头预览帧视频------浅析PreviewCallback,onPreviewFrame,AsyncTask的综合应用(转)
- Android高级应用开发(基础篇) - stage10 - 学习笔记
- Android高级应用开发(基础篇) - stage6 - 学习笔记(下)
- Android开发:实时处理摄像头预览帧视频------浅析PreviewCallback,onPreviewFrame,AsyncTask的综合应用
- Android高级应用开发(深入篇) stage3(上)- 高级商用界面开发 学习笔记
- android开发-高级应用、嵌入式底层资料和千人交流群
- Android高级应用开发(基础篇) - stage7 - 学习笔记
- Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比
- Android高级应用开发(基础篇) - stage2 - 学习笔记