Android_NewBird之Asynctask的基本使用(2)
2016-07-27 16:42
453 查看
Asynctask线程进度条退出之后取消,再进入界面,发现进度条不同步。
原因是:Asynctask必须先将之前的线程结束掉,才会执行下一个线程。
解决方案:将Asynctask的生命周期与Activity设置成一致。
原因是:Asynctask必须先将之前的线程结束掉,才会执行下一个线程。
解决方案:将Asynctask的生命周期与Activity设置成一致。
public class AsynctaskLoadProgressTest extends Activity { private ProgressBar pg; private MyAsynctask myAsynctask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_asynctask_load_progress_test); pg = (ProgressBar) findViewById(R.id.pg); myAsynctask = new MyAsynctask(); myAsynctask.execute(); } //进入task之后再退出,发现task不再同步。 原因:需要将上一次的task线程执行完。即将for循环执行完毕 //解决方法:让Asynctask与Activity具备相同的生命周期 @Override protected void onPause() { super.onPause(); //Asynctask不为空且处于running状态 if(myAsynctask != null && myAsynctask.getStatus() == AsyncTask.Status.RUNNING){ myAsynctask.cancel(true); //并不会直接取消掉task,而是发送一个cancel请求,并不会直接停止一个线程 } } class MyAsynctask extends AsyncTask<Void,Integer,Void>{ @Override protected Void doInBackground(Void... voids) { for(int i=0; i<100; i++){ //进行cancel判断 if(isCancelled()){ break; } publishProgress(i); try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if(isCancelled()){ return; } pg.setProgress(values[0]); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories