У меня есть AsyncTask, который загружает контент и помещает его на экран. Вот код:AsyncTask в Android не выйдет
private class ContentLoader extends AsyncTask<Void, Void, Void>{
private boolean running = false;
protected Void doInBackground(Void... params){
running = true;
while (running){
try {
publishProgress();
Thread.sleep(3000);
} catch (InterruptedException e) {
Log.d("ContentLoader", String.valueOf(e));
}
}
return null;
}
protected void onProgressUpdate(Void... progressParams){
setContents();
}
public void exit(){
Log.d("ContentLoader-exit before", String.valueOf(running));
running = false;
Log.d("ContentLoader-exit after", String.valueOf(running));
}
}
В setContents() - метод загружает некоторый текст из SQLite-базы данных и устанавливает его в TextViews, что все работает хорошо, пока я пытаюсь выйти из задачи. Когда я вызываю метод exit, обе регистрационные записи показывают значение «false», и цикл продолжается.
Я называю задачу из OnCreate-метода моей деятельности:
public class MainActivity extends ActionBarActivity {
ContentLoader contentLoader = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contentLoader = new ContentLoader();
contentLoader.execute();
}
Я хочу, чтобы бросить в onBackPressed:
@Override
public void onBackPressed(){
super.onBackPressed();
if (contentLoader != null){
contentLoader.exit();
}
finish();
Итак, как можно получить эту вещь, чтобы выйти? Спасибо за ваши ответы!
где вы устанавливаете running = false? внутри doInBackground? – iGoDa
Внутри метода выхода между протоколированием. –
sry, я имел в виду, что вы не вызываете метод exit внутри (работает), поэтому задача async не будет выходить – iGoDa