异步 解决方案
来源:互联网 发布:php 优惠券最优使用法 编辑:程序博客网 时间:2024/05/21 09:39
public class ThreadActivity extends Activity {
private Button btn;
private ProgressBar pb;
private MyAsyncTask mat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thread);
btn = (Button)findViewById(R.id.button1);
pb = (ProgressBar)findViewById(R.id.progressBar1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mat = new MyAsyncTask();
mat.execute();
}
});
}
/*
* AsyncTask的底层处理是线程池 新线程需要在老线程执行完毕之后 才能执行
* 解决办法:将AsyncTask的生命周期和Activity同步
*
*/
@Override
protected void onPause() {
super.onPause();
//判断是否为空且是否是运行状态
if(mat!=null&&mat.getStatus()==AsyncTask.Status.RUNNING){
//此方法只是将AsyncTask标记为结束状态 而不是停止此线程
/*
* 解决办法:在MyAsyncTask的doInBackground和onProgressUpdate中进行判断,
* 如果 检测到mat为运行 则跳出循环,并且不对ProgressBar赋值
*/
mat.cancel(true);
}
}
class MyAsyncTask extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i <100; i++) {
//判断为运行 则跳出循环
if(isCancelled()){
break;
}
try {
Thread.sleep(300);
publishProgress(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
if(isCancelled()){
return;
}
int i=values[0];
pb.setProgress(i);
super.onProgressUpdate(values);
}
}
}
private Button btn;
private ProgressBar pb;
private MyAsyncTask mat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thread);
btn = (Button)findViewById(R.id.button1);
pb = (ProgressBar)findViewById(R.id.progressBar1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mat = new MyAsyncTask();
mat.execute();
}
});
}
/*
* AsyncTask的底层处理是线程池 新线程需要在老线程执行完毕之后 才能执行
* 解决办法:将AsyncTask的生命周期和Activity同步
*
*/
@Override
protected void onPause() {
super.onPause();
//判断是否为空且是否是运行状态
if(mat!=null&&mat.getStatus()==AsyncTask.Status.RUNNING){
//此方法只是将AsyncTask标记为结束状态 而不是停止此线程
/*
* 解决办法:在MyAsyncTask的doInBackground和onProgressUpdate中进行判断,
* 如果 检测到mat为运行 则跳出循环,并且不对ProgressBar赋值
*/
mat.cancel(true);
}
}
class MyAsyncTask extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i <100; i++) {
//判断为运行 则跳出循环
if(isCancelled()){
break;
}
try {
Thread.sleep(300);
publishProgress(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
if(isCancelled()){
return;
}
int i=values[0];
pb.setProgress(i);
super.onProgressUpdate(values);
}
}
}
0 0
- 异步 解决方案
- 数据库异步访问解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- 【Android】异步加载解决方案
- Android异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- Android 异步加载解决方案
- 数据库异步访问解决方案
- ECMAScrpt6 异步最终解决方案
- [拓扑序DP 记忆化搜索] BZOJ 4562 [Haoi2016]食物链
- Java Reentranlock
- 本地索引中 前缀索引和非前缀索引的测试 oracle
- [KD TREE] BZOJ 3053 The Closest M Points
- LeetCode Factorial Trailing Zeroes
- 异步 解决方案
- BSOJ: 3748 【USACO 2006 March Gold】Milk Team Select产奶比赛
- Android 基础总结:(七)BroadcastReceiver详解(上)
- 体系结构
- 守护进程-解析
- Python之numpy教程(二):运算、索引、切片
- K均值聚类算法及MATLAB函数使用
- 【Leetcode】Longest Palindromic Substring
- Go语言的并发和并行