跟踪AsyncTask状态以更新ListView项目

时间:2013-05-20 14:01:40

标签: android download android-asynctask

我有一个ListView,显示了一堆可下载的对象。当用户单击列表项时,该项目将通过AsyncTask下载,并且还会显示下载进度的通知。我还希望在ListView项目中显示进度。

当您使某个项目脱机可用时,我希望行为或多或少像Google云端硬盘一样。

我的问题:考虑到在下载完成之前关闭应用程序的情况,我想不出一种“存储”可以在getView()中检索的下载状态的强大方式。

onProgressUpdate()应该最好地在数据库中存储下载进度,活动内部的变量还是直接修改ListView子项?

修改

对于任何感兴趣的人,我使用的服务在下载状态发生变化时发送广播:

的活动:

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);

1 个答案:

答案 0 :(得分:1)

我会尝试使用Service,如果您有跟踪下载的通知,它看起来您可能正在做什么。如果您可以跟踪Service中的进度并将该信息也发送到ListView,则可以轻松地在ProgressBar中显示Service

使用SharedPreferences还可以使用{{1}}存储下载的信息,以便稍后在应用关闭时访问该信息。有点概念,但我希望这会有所帮助。