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);
}
}
}