我有AsyncTask,我在后台的进展是无限循环。但是当用户停止我的应用程序或从我的应用程序返回时,我需要停止AsyncTask(我的应用程序转到前台)。我该怎么办?
解决方案:
private boolean done = false;
private class CurTask extends AsyncTask<String, Void, Object> {
protected Void doInBackground(String... args) {
while(!done){
DefaultCurProgress();
publishProgress();
}
}
protected void onProgressUpdate(Void...unused) {
textCur = (TextView)findViewById(R.id.text_cur);
SharedPreferences myPrefs = MyActivity.this.getSharedPreferences("myPrefs", MODE_PRIVATE);
String prefNameDefaultCur = myPrefs.getString(DefaultCur, "");
textCur.setText(prefNameDefaultCur);
}
}
@Override
public void onPause(){
super.onPause();
done=true;
}
@Override
public void onResume(){
super.onResume();
done=false;
}
答案 0 :(得分:4)
在AsyncTask中声明一个告诉它结束的方法。像这样:
private class CurTask extends AsyncTask<String, Void, Object> {
private boolean done = false;
public void quit() {
done = true;
}
protected Void doInBackground(String... args) {
while(!done){
DefaultCurProgress();
publishProgress();
}
}
答案 1 :(得分:0)
添加一个布尔成员变量并在while条件中使用它而不是 true 。
然后当你需要取消它时你可以调用一个实例方法将这个变量设置为false,doInBackground方法将返回并且任务将完成。