Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中在后台下载多个文件_Java_Android_Multithreading - Fatal编程技术网

Java 在Android中在后台下载多个文件

Java 在Android中在后台下载多个文件,java,android,multithreading,Java,Android,Multithreading,基本上,我正在尝试制作一个用于观看离线内容的小应用程序。因此,有时用户会选择下载内容(应用程序应该下载大约300个小文件和图像) 我想向用户展示,如果用户输入了正确的活动,流程将如何进行。显示所有文件的列表,说明已下载、正在下载或等待下载的内容 我的问题是,我真的不知道采取什么方法来实现这一点。既然下载应该持续到完成,我想解决方案应该是一个服务,但是什么是最好的呢?每次下载时调用startService()的IntentService、绑定服务或标准服务?我如何更新我的对象以便以后显示它们?我应

基本上,我正在尝试制作一个用于观看离线内容的小应用程序。因此,有时用户会选择下载内容(应用程序应该下载大约300个小文件和图像)

我想向用户展示,如果用户输入了正确的活动,流程将如何进行。显示所有文件的列表,说明已下载、正在下载或等待下载的内容

我的问题是,我真的不知道采取什么方法来实现这一点。既然下载应该持续到完成,我想解决方案应该是一个
服务
,但是什么是最好的呢?每次下载时调用startService()的IntentService、绑定服务或标准服务?我如何更新我的对象以便以后显示它们?我应该使用数据库还是内存中的对象

谢谢

我建议使用类,它允许您轻松地将耗时的代码(如下载文件)移动到不同的线程。这将使你的应用程序保持快速响应,同时让你能够在此过程中更新你的用户界面


如果没有更多关于你希望你的应用程序如何运行的细节,就很难更加具体。下载只会在应用程序运行时或在后台进行吗?

您可以使用Asynctask或使用自定义策略实现ExecutorService,并向其发送下载线程。
如果希望给用户机会停止下载,则需要在集合中分别保留对AsyncTask或Future对象的引用。 当然,每次下载新文件时都需要调用startService。 仅当服务未运行且每次调用startService时onStartCommand运行时,才会调用Service onCreate。在onstart命令中,运行新线程以下载新文件。
您可以将服务与活动绑定,每次创建downloadsActivity时,都会显示实现自定义适配器的下载状态。只有在您呼叫activity.stopService或Service.stopSelf时,服务才会结束。您应该注意,如果“在线内容”不是您的,则您违反了Google Play的开发者协议。谢谢您的建议,但我是该内容的所有者