我有一个下载活动,可以为我的应用程序下载一些zip文件。 我希望我的活动有这个功能:
我搜索了很多,看到了很多方法可以用来下载文件(比如使用AsyncTask / Downloadmanager / Groundy ......),但我不知道哪一个有我想要的功能
您认为一起实现此功能的最佳方法是什么?
我不想要您的完整代码,只是一些提示和方法或参考资料,以帮助我实现这些功能并找到最佳方法。
感谢您的时间。
答案 0 :(得分:0)
如果下载严格依赖于活动,那么从根本上说,您可以使用AsyncTask来实现上述目标。但是,一旦用户取消或退出活动,就需要正确取消AsyncTask。它还提供了进行进步的基本机制。
例如,想象一个简单的异步任务(不是最佳实现),但如下所示
class SearchAsyncTask extends AsyncTask<String, Void, Void> {
SearchHttpClient searchHttpClient = null;
public SearchAsyncTask(SearchHttpClient client) {
searchHttpClient = client;
}
@Override
protected void onProgressUpdate(Void... values) {
// You can update the progress on dialog here
super.onProgressUpdate(values);
}
@Override
protected void onCancelled() {
// Cancel the http downloading here
super.onCancelled();
}
protected Void doInBackground(String... params) {
try {
// Perform http operation here
// publish progress using method publishProgress(values)
return null;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute() {
// If not cancelled then do UI work
}
}
现在在你的活动的onDestroy方法
@Override
protected void onDestroy() {
Log.d(TAG, "ResultListActivity onDestory called");
if (mSearchTask != null && mSearchTask.getStatus() != AsyncTask.Status.FINISHED) {
// This would not cancel downloading from httpClient
// we have do handle that manually in onCancelled event inside AsyncTask
mSearchTask.cancel(true);
mSearchTask = null;
}
super.onDestroy();
}
但是,如果您允许用户甚至独立于活动下载文件(即使用户离开活动也会继续下载),我建议使用可以在后台进行操作的服务。
更新:刚刚注意到Stackoverflow上有一个类似的答案,它更详细地解释了我的想法Download a file with Android, and showing the progress in a ProgressDialog