[英]best way to download a file in android with?
我有一个下载活动,该活动为我的应用程序下载了一些zip文件。 我希望我的活动具有以下功能:
我进行了很多搜索,看到了许多可用于下载文件的方法(例如使用AsyncTask / Downloadmanager / Groundy ...),但我不知道其中哪一个具有我想要的功能
您认为什么是同时实现此功能的最佳方法?
我不希望您得到完整的代码,仅希望一些提示,方法或参考来帮助我实现所有这些功能并找到最佳方法。
谢谢你的时间。
如果下载严格地与活动绑定,则可以从根本上使用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上有一个类似的答案,它进一步详细解释了我的想法。 使用Android下载文件,并在ProgressDialog中显示进度
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.