AsyncTask基础(2)
来源:互联网 发布:淘宝网手机魅族 编辑:程序博客网 时间:2024/06/06 09:02
这次在上一节的基础上,增加一个进度条的更新,下面先上图
跟上一节内容类似,就是遇到一个问题,当进度条没有加载完成的时候按下back返回再进来出现进度条不加载的状况,随后又会继续加载,原因是在于AsyncTask的需要线程执行完毕后才会执行下一个操作,当我们在加载完成前back在加载是加上是需要等待之前的线程工作完毕才会继续下一个线程,在这里我们的处理方法是在onPause方法中加一个判断当前线程是否在工作
protected void onPause() { super.onPause(); //cancel只是将对应的AsyncTask标记为cancel状态,并未真正取消线程的取消 if (mtask != null && mtask.getStatus() == AsyncTask.Status.RUNNING) { mtask.cancel(true); } }
但是这样操作还没有真正解决问题,原因可以看注释。
因为进度加载时在一个for循环里面的,循环如果没有结束,那么就不会跳出来,所以我们应该对for循环进行判断在i++。
for (int i = 0; i < 100; i++) { if (isCancelled()) { break; } publishProgress(i);
在onPause中判断了cancel,这里对之前的操作进行判断,如果为iscanceled == true,那么跳出循环。然后相应的onProgressUpdate()方法中也要进行判断
protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if (isCancelled()) { return; } //获取进度的更新值 progress.setProgress(values[0]); }
下面放上全部代码
ProgressBarTest.class:
package com.example.tony.anynctasktest;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.widget.ProgressBar;/** * Created by Tony on 16/11/15. */public class ProgressBarTest extends Activity { private ProgressBar progress; private MyAsyncTask mtask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.progressbar); progress = (ProgressBar) findViewById(R.id.progress); mtask = new MyAsyncTask(); mtask.execute();//启动 } @Override protected void onPause() { super.onPause(); //cancel只是将对应的AsyncTask标记为cancel状态,并未真正取消线程的取消 if (mtask != null && mtask.getStatus() == AsyncTask.Status.RUNNING) { mtask.cancel(true); } } class MyAsyncTask extends AsyncTask<Void, Integer, Void> { @Override protected Void doInBackground(Void... voids) { //模拟进度更新 for (int i = 0; i < 100; i++) { if (isCancelled()) { break; } publishProgress(i); try { //增加睡眠时间来延缓更新的进度 Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if (isCancelled()) { return; } //获取进度的更新值 progress.setProgress(values[0]); } }}
顺便提一句像我这样的新手们不要忘记注册Activity哟。
0 0
- AsyncTask基础(2)
- AsyncTask基础(笔记)
- android基础(AsyncTask)
- AsyncTask基础
- asyncTask基础
- AsyncTask基础
- Android 基础总结:( 十三)AsyncTask
- 【Android基础】AsyncTask基础
- AsyncTask 学习 (2)
- AsyncTask的基础
- AsyncTask的基础
- AsyncTask的基础
- AsyncTask的基础
- [Android基础]AsyncTask类
- android基础--AsyncTask
- AsyncTask同步加载基础
- Android AsyncTask基础
- AsyncTask基础<笔记>
- 数据库放的是数字:通过查表 查出来对应的爱好:
- Oracle 11G 出现EXP-00003: 未找到段 (0,0) 解决办法
- poj1061青蛙的约会(扩展欧几里得)
- 感想 - 写在NOIP2016之前
- vijos P1164曹冲养猪
- AsyncTask基础(2)
- 微信相关
- Web-网上在线支付
- JS 的解析与执行过程
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- spring,springmvc,mybatis,shiro,redis实现的通用权限管理系统
- linux网络设备理解
- 写了六个相同功能的函数之后,我学到了什么
- Python读取MATLAB存储的mat文件