Я запускаю службу при входе пользователя в систему, которая позволяет загружать множество вложений в фоновом режиме с помощью AsyncTask.
Пока идет фоновая загрузка вложений и пользователь вошел в приложение, я поворачиваю свое устройство из альбомной в книжную ориентацию.
В книжной ориентации у меня есть еще одна функция для вычисления некоторых данных в фоновом режиме с помощью AsyncTask. Эта функциональность содержит следующий код:
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Calculating...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Integer doInBackground(Integer... args) {
//Some data processing
}
@Override
protected void onPostExecute(Integer file_url) {
super.onPostExecute(file_url);
if(pDialog.isShowing()) {
pDialog.dismiss();
pDialog.cancel();
}
}
Проблема в том,
Когда я поворачиваю устройство в портретную ориентацию -
1) Диалоговое окно прогресса никогда не закрывается, пока я не перезапущу/не перезапущу приложение.
2) Книжный макет ожидает завершения фоновой задачи вложений и только после этого вычисляет асинхронные данные, которые находятся в его собственном макете в фоновом режиме.
3) Когда вычисление асинхронных данных завершается, портретный макет заполняется этими рассчитанными данными, но диалоговое окно прогресса не закрывается до перезапуска приложения.
pDialog
была уничтожена, и она была воссоздана. Я сделал AsyncTask ссылкой на несуществующую переменную. - person tyczj   schedule 31.03.2014