繁体   English   中英

在android中下载文件的最佳方法?

[英]best way to download a file in android with?

我有一个下载活动,该活动为我的应用程序下载了一些zip文件。 我希望我的活动具有以下功能:

  • 能够暂停/继续下载
  • 通过进度条在我的活动的UI中显示下载进度(不适用于dialogProgress)
  • 显示带有下载进度的通知,并且当用户单击通知时,即使应用程序关闭并且我的UI在下载过程中保持更新,它也会打开我的活动

我进行了很多搜索,看到了许多可用于下载文件的方法(例如使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM