如何在Android中使用IntentService同时下载多个文件?
我想创建一个与此服务类似的服务(从Here引用),以在Android中异步下载多个文件。
public static class DownloadingService extends IntentService {public static String PROGRESS_UPDATE_ACTION = DownloadingService.class
.getName() + ".newDownloadTask";
private ExecutorService mExec;
private CompletionService<NoResultType> mEcs;
private LocalBroadcastManager mBroadcastManager;
private List<DownloadTask> mTasks;
public DownloadingService() {
super("DownloadingService");
mExec = Executors.newFixedThreadPool( 3 ); // The reason to use multiple thread is to download files asynchronously.
mEcs = new ExecutorCompletionService<NoResultType>(mExec);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent intent) {
while(true)
{
if( cursor <= totalDownloadQueue.size() -1) { //totalDownloadQueue is a static ArrayList which contains numerous DownloadTask
mEcs.submit(totalDownloadQueue.get(cursor));
cursor++; // The variable cursor is also a static int variable.
}
}// continuously observing the totalDownloadQueue. If any download item is added. Then the thread are dispatched to handle that.
mExec.shutdown();
}
用户可以选择listview
不同片段中的下载项目。我的策略是,随着用户选择项目并按下下载按钮,这些项目将被传递到DownloadTask
其中,负责下载文件。然后将下载任务添加到中totalDownloadQueue
。
这里有一些问题:
- 我知道
intentservice
是由某些已定义的操作触发的。但是我想要创建一个后台服务,监视totalDownloadQueue
,如果downloadtask
有新消息可用,那么将调用一些线程来操作任务。
如果我对这个定制商品这样做有什么副作用intentservice
?
我应该使用什么替代类?请提供sample code
说明,谢谢。
据我所知,线程的初始化仅被调用一次。如果我在应用程序的开头启动服务,并且在用户终止应用程序时应该杀死线程。(我的意思是当他
swipe out
打开窗口时。)用户退出应用程序后线程是否存在?如果这种方法仍然不能解决有关异步下载文件的问题?我应该采取什么其他策略?请提供一些示例代码或参考,以便我对其进行修改。
我已经花了7天时间来处理复杂的要求,请帮忙!
回答:
在Android中异步下载多个文件。
而且我认为您想同时下载。
我想你误用了intentservice
。intentservice
有一个looper
和一个handler
,每个start调用都会为处理程序创建一条消息。所有邮件都在中排队,looper
queue并且一次发送一次。
您应该使用常规服务,而不要使用,intentservice
因为您一次要同时下载而不是一次。扩展服务类,并在onCreate
方法中可以创建多个线程,每个线程可以从中获取消息onStartCommand
。我不想复制并粘贴该文档示例,因为我认为最好再次阅读所有文档。如果您阅读它,则可以完全理解如何创建同时处理多个任务的服务,尽管该示例中仅创建了一个线程。
http://developer.android.com/guide/components/services.html
我想要创建一个监视totalDownloadQueue的后台服务
我认为你不需要那个。仅当您创建downloadtask
呼叫服务时,您的信息message
就会传递到服务类,您可以在该类中通过创建blockingqueue
来处理消息threads
。
用户退出应用程序后,线程是否存在?
是的,也许不是。它取决于该过程,如果该过程存在则是,但是如果该过程已被破坏则否。再次阅读lifecycle
进程,以了解哪些进程被android杀死或保留。
http://developer.android.com/guide/components/processes-and-
threads.html
如果这种方法仍然不能解决有关异步下载文件的问题?我应该采取什么其他策略?请提供一些示例代码或参考,以便我对其进行修改。
您可以使用,downloadmanager
但会顺序下载。
http://developer.android.com/reference/android/app/DownloadManager.html
http://blog.vogella.com/2011/06/14/android-downloadmanager-
example/
以上是 如何在Android中使用IntentService同时下载多个文件? 的全部内容, 来源链接: utcz.com/qa/404595.html