让我们一起谈谈AsyncTask
来源:互联网 发布:软件体系结构实验报告 编辑:程序博客网 时间:2024/04/27 16:15
已经好久没有自己写文章了,不是给链接,就是拼凑一些代码,今天再次看到AsyncTask这个类,本来我是拒绝的,因为我认为有了Hander,或者是直接在子线程里面写一个runOnUiThread也能够很方便的更新UI,但后来听说面试的时候这个类经常会问到,吓得我赶紧写了篇文章巩固一下。
废话不说了,直接上代码,所有的解释工作都在代码里用注释体现了,首先让我们先创一个工程,名字就叫做AsyncTaskDemo吧。
修改MainActivity.java
public class MainActivity extends AppCompatActivity { private ProgressBar pb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pb = (ProgressBar) findViewById(R.id.pb); int begin = 0; new myAsyncTask().execute(begin); } /** * 这个类有三个泛型 * 第一个泛型是new出来的对象在调用execute方法的时候进行传递的类型,是对应doInBackground * 第二个泛型是publishProgress方法的参数,对应onProgressUpdate * 第三个泛型对应doInBackground的返回值,对应onPostExecute */ class myAsyncTask extends AsyncTask<Integer, Integer, Boolean>{ /** * 这个方法是在最开始执行的,一般用来做初始化操作 */ @Override protected void onPreExecute() { super.onPreExecute(); } /** * 这个方法是运行在子线程里面的,在这里可以进行耗时操作(核心方法) * * @param params new出来的对象在调用execute()方法传过来的参数,对第一个泛型 * @return */ @Override protected Boolean doInBackground(Integer... params) { Integer current = params[0]; while(true){ try { Thread.sleep(1000); current++; //这个方法一执行onProgressUpdate就被调用了 publishProgress(current); System.out.println(current); if(current == 100) break; } catch (InterruptedException e) { e.printStackTrace(); } } return true; } /** * 这个方法也是运行在UI线程 * @param values 对应第二个泛型,一般是通过doInBackground方法里面对这个方法进行一些调用 */ @Override protected void onProgressUpdate(Integer... values) { pb.setProgress(values[0]); } /** * 这个方法也是运行在UI线程,当doInBackground执行完毕后调用,aVoid就是其返回值 * @param aVoid 对应第三个泛型 */ @Override protected void onPostExecute(Boolean aVoid) { if(aVoid){ Toast.makeText(getApplicationContext(), "OK", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(getApplicationContext(), "NOT OK", Toast.LENGTH_LONG).show(); } } }}
在修改一下activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.mengxin.asynctaskdemo.MainActivity"> <ProgressBar android:id="@+id/pb" android:max="100" android:progress="0" style="@android:style/Widget.ProgressBar.Horizontal" android:visibility="visible" android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>
这样就OK了,写完今天就休息了,哈哈,每天都给自己找偷懒的理由。
0 0
- 让我们一起谈谈AsyncTask
- 让我们谈谈RAID
- 让我们谈谈RAID
- 让我们来谈谈分工
- 让我们来谈谈分工
- 让我们来谈谈分工
- 让我们来谈谈分工
- 摩卡,让我们一起成长
- 让我们一起挑战吧!
- 今天,让我们一起努力
- 让我们一起努力吧~
- 让我们一起Go(五)
- 让我们一起Go(六)
- 让我们一起Go(七)
- 让我们一起Go(八)
- 让我们一起Go(九)
- 让我们一起走进 多线程
- 让我们一起学习Makefile
- 深度学习笔记2torch实现线性回归
- 最牛逼的投资就是投给自己
- 饥荒mod物品(食物)(农作物)--02
- Maven-Archetype自定义项目脚手架(一)
- uniq与sort -u去重区别和联系
- 让我们一起谈谈AsyncTask
- DataTables服务器端传入传出(接收与提交)的数据格式 搜索、排序和分页与后台数据的交互
- 栈段
- [深度学习基础] 2. 线性分类器
- Python 基础回顾(八)
- 大数据技术之HBase篇
- C# 引用类型导致的只读属性失效
- 关于RabbitMQ的安装与使用(一)
- 数列题