AsyncTask模拟进度条
来源:互联网 发布:一搜影咖软件 编辑:程序博客网 时间:2024/05/20 15:56
现在开始一个稍微复杂点点的示例,用异步AsyncTask来模拟进度条
2. MainActivity.java代码:
1. 布局文件,就放一个ProgressBar
2. MainActivity.java代码:
public class MainActivity extends Activity {
private ProgressBar mProgressBar;
private MyAsyncTask mTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mProgressBar = (ProgressBar)findViewById(R.id.progressBar);
mTask = new MyAsyncTask();
mTask.execute();
}
class MyAsyncTask extends AsyncTask {
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i < 100; i++) {
if(isCancelled()){
break;
}
// 模拟进度更新
publishProgress(i);
try {
Thread.sleep(300);
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
if(isCancelled()){
return;
}
// 获取进度更新值
mProgressBar.setProgress(values[0]);
}
}
@Override
protected void onPause() {
super.onPause();
if (mTask != null && mTask.getStatus() ==AsyncTask.Status.RUNNING) {
// 注意这里cancle方法只是将对应的AsyncTask标注为cancle状态,并不是真正的取消线程的执行
mTask.cancel(true);
}
}
}
让线程的生命周期与activity绑定起来,在这里可以避免一种情况,当进度条未达到最后,按了home键让activity不可见,再次进入activity,进度条并未从开始执行下去,因为前一段线程中的for循环并未执行完毕,等那一段执行完毕后,新的才开始执行。这里利用cancel方法,将线程和activity生命周期绑定起来,就避免了那种bug出现。
3. 运行结果
总结
AsyncTask注意事项:
1. 必须在UI线程中创建AsyncTask的实例
2. 必须在UI线程中调用AsyncTask的execute()方法
3. 重写的四个方法是系统自动调用的,不应该手动调用
4. 每个AsyncTask只能被执行一次,多次调用将会引发异常
5.四个方法中,doInBackground()是运行在其他线程的,是做异步处理的,不能直接更新UI,其他的方法都是运行在UI线程的,可以用来更新UI
0 0
- AsyncTask模拟进度条
- 利用AsyncTask模拟进度条
- 模拟进度条
- 模拟进度条
- AsyncTask 带进度条工具类
- AsyncTask模拟下载学习
- AsyncTask模拟小应用 AsyncTask步骤
- js模拟进度条
- dos模拟进度条显示
- JS模拟进度条
- Ajax模拟进度条
- C# 进度条模拟
- css+div模拟进度条
- 模拟实现进度条
- 进度条的模拟实现
- linux进度条功能模拟
- JavaScript模拟实现进度条
- Ajax模拟制作进度条
- rootkit介绍与检测
- 开发自定义拦截器
- 10-排序5 PAT Judge
- 异步任务AsyncTask初步
- 异步任务AsyncTask进阶
- AsyncTask模拟进度条
- TextView实现跑马灯
- Android布局优化
- 三季度全国招聘放缓,超4成职场人想跳槽
- Android动画
- 解析Json数据格式
- 活动的启动模式
- mac os 工作空间 桌面顺序
- Android自动朗读(TTS)