(进度条)AsyncTask中核心方法讲解之易被忽略的onProgressUpdate
来源:互联网 发布:unity3d 刚体穿透 编辑:程序博客网 时间:2024/06/06 03:27
AsyncTask是一种轻量级的异步任务类,可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI。
它是一个抽象的泛型类,它提供了Params、Progress、和Result着三个泛型参数,本篇主要讲解第二个参数的应用,进度条的实现。
说一下进度条实现相关两个方法:
doInBackground(Params...params)。这是在线程池中执行的方法,该方法执行异步任务,发生在子线程中。params参数表示异步任务输入参数。这里面可以通过publishProgress方法来更新任务的进度,publishProgress方法会调用onProgressUpdate方法。
onProgressUpdate(Progress...values),这个方法是在主线程中执行的。就是当后台任务的执行进度发生改变的时候会被调用。
简单的进度条实现代码如下:
public class Progressestest extends Activity {
private ProgressBar mProgressBar;
private MyAsytask myAsytask;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progressest);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
myAsytask = new MyAsytask();
myAsytask.execute();
}
protected void onPause() {
super.onPause();
// 如果异步的不为空或者正在执行,把他取消掉
if (myAsytask != null
&& myAsytask.getStatus() == AsyncTask.Status.RUNNING) {
// cancel方法只是将对应的AsyncTask标记为cancel状态,并不是真正的取消线程的执行。
// cancel状态,结束进程
myAsytask.cancel(true);
} else {
}
}
class MyAsytask extends AsyncTask<Void, Integer, Void> {
protected Void doInBackground(Void... arg0) {
// 模拟进度条的更新
for (int i = 0; i < 100; i++) {
if (isCancelled()) {
break;
}
publishProgress(i);
try {
// 一天86400
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
if (isCancelled()) {
return;
}
// 获取进度更新值
mProgressBar.setProgress(values[0]);
}
}
}
在代码中可能有几个小疑问,不知大家是否注意到doInBackground和onProgressUpadate方法它们的参数中包含...的字样,在java中...表示参数的数量不定,是一种数组型参数,它与c语言中的...是一致的。还有在起初提到的什么是泛型呢?
List<String> list = new ArrayList<String>();
list.add("gang");
list.add("oo"); //list.add(100); // 1 提示编译错误
这样一段简单的代码是不能想起来泛型的一些概念。
- (进度条)AsyncTask中核心方法讲解之易被忽略的onProgressUpdate
- Android AsyncTask onProgressUpdate 方法的些许研究
- 巧用AsyncTask的onProgressUpdate回调
- AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
- AsyncTask异步相关方法使用(进度条)
- AsyncTask的使用 (二)图片下载,进度条
- Android:异步任务AsyncTask、execute、publishProgress、onProgressUpdate
- Android:异步任务AsyncTask、execute、publishProgress、onProgressUpdate
- Android:异步任务AsyncTask、execute、publishProgress、onProgressUpdate
- 被忽略的方法之-mini-lanaguage
- 被忽略的方法之-mini-lanaguage
- Java中一些易忽略方法的使用技巧
- Rectangle应用实战+Array中被你忽略的方法
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
- Android中AsyncTask的讲解(动态下…
- 实例讲解Android中AsyncTask的使用详解
- AsyncTask后台线程的简单应用(进度条更新显示)
- ProgressBar + AsyncTask (普通的进度条)10秒后完成
- hdu 2032 杨辉三角
- VLC播放器实现推流以及串流的方式
- Kattis peaktram (树状数组 DP)
- QT+VS2010平台搭建图文教程
- ubuntu mini2440 usb
- (进度条)AsyncTask中核心方法讲解之易被忽略的onProgressUpdate
- 数据库写通讯录
- Google官方MVP+Dagger2架构详解----非常详细,值得多看几遍(okhttp cache)
- ELK5.0日志分析平台搭建+Beats
- 直线围成的三角形数
- 链表中倒数第k个节点
- 蓝牙ble实现空中升级功能
- CodeForces 719E Sasha and Array 【线段树】【快速矩阵幂】
- Hbase协处理器(Coprocessor)