当前位置: 首页 > 面试题库 >

如何在Android中使用IntentService同时下载多个文件?

赵智
2023-03-14
问题内容

我想创建一个与此服务类似的服务(从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

这里有一些问题:

  1. 我知道intentservice是由某些已定义的操作触发的。但是我想要创建一个后台服务,监视totalDownloadQueue,如果downloadtask有新消息可用,那么将调用一些线程来操作任务。

如果我对这个定制商品这样做有什么副作用intentservice

我应该使用什么替代类?请提供sample code说明,谢谢。

  1. 据我所知,线程的初始化仅被调用一次。如果我在应用程序的开头启动服务,并且在用户终止应用程序时应该杀死线程。(我的意思是当他swipe out打开窗口时。)用户退出应用程序后线程是否存在?

  2. 如果这种方法仍然不能解决有关异步下载文件的问题?我应该采取什么其他策略?请提供一些示例代码或参考,以便我对其进行修改。

我已经花了7天时间来处理复杂的要求,请帮忙!


问题答案:

在Android中异步下载多个文件。

而且我认为您想同时下载。

我想你误用了intentserviceintentservice有一个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/



 类似资料:
  • 我正在尝试下载https://occ.ca/our-publications 我的最终目标是解析PDF文件中的文本并定位某些关键字。 到目前为止,我已经能够抓取所有页面上PDF文件的链接。我已将这些链接保存到列表中。现在,我想浏览一下列表并用Python下载所有pdf文件。下载完文件后,我想对它们进行解析。 这是我迄今为止使用的代码: 这是我运行代码时遇到的错误。 回溯(最近的最后一次调用):ur

  • 问题内容: 我有一个必须下载多个大文件的应用程序。我希望它依次而不是同时下载每个文件。当它同时运行时,该应用程序将过载并崩溃。 所以。我试图将downloadTaskWithURL包装在NSBlockOperation内,然后在队列上设置maxConcurrentOperationCount = 1。我在下面编写了此代码,但由于两个文件同时下载而无法正常工作。 如何正确编写此代码以实现我一次只下载

  • 在特定的活动流下,我无法将意图交付给:这是一个场景: 考虑3个活动,Home、B和C。C有两个片段CF1和CF2 B、 CF1和CF2使用相同的IntentService类,但操作不同 IntentService开始使用。(getActivity()。片段的startService(意图) 无论IntentService在哪里启动,如果它在Activity/Fragment的中运行,我都会使用来确

  • 我想在多个项目中使用google-service.json文件,是否可以在多个项目中使用相同的google-service.json?如果可能的话,我们怎么做呢?

  • 问题内容: 我正在创建一个简单的项目,使我可以使用gwt上传和下载文件。我在下载服务器上的文件时遇到了麻烦。 对于文件上传,我使用了http://code.google.com/p/gwtupload/并按照那里的说明进行操作。我的文件存储在网站容器外部的服务器上(在硬盘上), 现在,当涉及到文件下载时,我希望用户按下下载按钮,并且当前选择的任何项目都将下载。我真的不知道该怎么做 我知道我需要下载

  • 本文向大家介绍Android 基于IntentService的文件下载的示例代码,包括了Android 基于IntentService的文件下载的示例代码的使用技巧和注意事项,需要的朋友参考一下 文件下载这种事情是很耗时的。之前使用AsyncTask这样的异步类来做下载,然后切到后台就被干掉。所以打算试试Service。(不过按目前那些系统的尿性,其实Service也分分钟被干掉) 不过,这里并不