У меня есть ListView
, который показывает кучу загружаемых объектов. Когда пользователь нажимает элемент списка, элемент загружается через AsyncTask
, а также добавляется уведомление о ходе загрузки. Я также хочу, чтобы прогресс отображался внутри элемента ListView.Сохранение статуса AsyncTask для обновления элементов ListView
Я хочу вести себя более или менее как Google Диск, когда вы делаете доступный элемент в автономном режиме.
Моя проблема: учитывая ситуации, когда приложение закрыто до завершения загрузки, я не могу придумать надежный способ «сохранить» статус загрузки, который можно получить в getView()
.
Должно ли onProgressUpdate()
лучше всего сохранить ход загрузки в базе данных, переменную внутри действия или изменить дочерний элемент ListView напрямую?
EDIT
Для тех, кто заинтересован, я использовал сервис, который рассылает широковещательный при изменении состояния загрузки:
активность:
private BroadcastReceiver mDataSetChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(downloadDetailFragment!=null){
downloadDetailFragment.notifyDataSetChanged();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LocalBroadcastManager.getInstance(this).registerReceiver(mDataSetChangedReceiver,
new IntentFilter(DownloadService.DOWNLOAD_STATUS_CHANGED));
}
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance (это). unregisterReceiver (mDataSetChangedReceiver); }
AsyncTask:
Intent intent = new Intent(DownloadService.DOWNLOAD_STATUS_CHANGED);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
Ницца, я попробую его. Раньше не думал об «SharedPreferences». – Maarten
Должен ли я использовать «BroadcastReceiver» в ListView, слушая обновления из службы? Служба не может содержать ссылку на «ListView» ... – Maarten
Я просто хотел бы, чтобы служба записывалась прямо в «SharedPreferences». Возможно, я ошибаюсь, но, похоже, нет необходимости подключать «BroadcastReceiver», если вы не выполняете какую-либо фоновую синхронизацию, когда пользователь не взаимодействует. – Wenger