0

我需要创建一个简单的应用程序来执行此操作: - 每次运行尝试从网络下载大约 20 个 pdf (每次都从同一个位置,因为服务器每分钟都会保持更新) - 主要活动将只是pdf 列表。将扫描一个目录以查找下载的文件。如果有的话,它们将被列出。

问题是我需要“在后台”下载,而不是“永无止境的服务”。

我正在考虑在应用程序启动时创建启动服务。主要活动扫描目录显示pdf,而服务尝试下载pdf。

如果第一次还没有下载所有的pdf,那不是问题。

我试图这样做,但服务“锁定”了应用程序,所以应用程序没有响应。

我在想该服务运行到一个单独的线程中。是真的吗?

那么:让活动顺利进行但在后台“某事”下载大量文件的最佳解决方案是什么?

4

2 回答 2

3

Android-AsyncTaskAndroid-IntentService最适合您的要求。

如果您打算使用 AsyncTask,您可以在继续下载的同时定期更新您的 Activity UI。

于 2012-09-02T11:53:52.020 回答
0

我建议深入检查 Intent Service 概念。http://developer.android.com/reference/android/app/IntentService.html

从一方面来说,这是一种服务。这意味着当用户从您的应用程序中按“主页”时,系统可能不会终止下载。然而,它不是

永无止境的服务

因为它将在下载完成后完成(如果不再启动任务)。

并回答你的问题:

我在想该服务运行到一个单独的线程中。是真的吗?

这不是 100% 正确的。如果您只是startService在 Service.onCreate() 中使用并执行繁重的任务 - 它会挂起您的应用程序,因为它在 UI 主线程中运行。但是,如果您要扩展 IntentService - 它有一个方便的方法来覆盖onHandleIntenthttp://developer.android.com/reference/android/app/IntentService.html#onHandleIntent(android.content.Intent )),这将是在单独的线程中执行。IntentService 将为您做到这一点。

如果有任何问题,请告诉我。

于 2012-09-02T12:08:38.513 回答