Я запускаю AsyncTask в MainActivity и заставляю его спать 10 секунд в методе doInBackground()
.В промежутке (до истечения 10 секунд) я нажимаю кнопку «Домой», а также обновляю текст в TextView в методе AsyncTask onPostExecute()
.Мой AsyncTask может успешно обновлять представление, даже если мое приложение работает в фоновом режиме.
Я не уверен, как это возможно, кстати, если я нажму кнопку «Назад», то я вижу метод onDestroy()
вызываемой операции, но все же нет исключения, когда onPostExecute()
метод пытается обновить TextView.
public class MainActivity extends AppCompatActivity {
private TextView finalTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
finalTextView = (TextView) findViewById(R.id.finalTextView);
AsyncTaskRunner task = new AsyncTaskRunner();
task.execute("10", "11", "12");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("onDestroy", "ActivityDestroyed");
}
private class AsyncTaskRunner extends AsyncTask<String, String, String> {
private String resp;
@Override
protected String doInBackground(String... params) {
publishProgress("Sleeping..."); // Calls onProgressUpdate()
try {
int time = Integer.parseInt(params[0]) * 1000;
Thread.sleep(time);
resp = "Slept for " + params[0] + " seconds";
} catch (InterruptedException e) {
e.printStackTrace();
resp = e.getMessage();
} catch (Exception e) {
e.printStackTrace();
resp = e.getMessage();
}
return resp;
}
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
finalTextView.setText(result);
Log.e("onPostExecute", "" + result);
}
}
}