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

2023-11-30

我想创建一项与此类似的服务(参考来自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连同解释,谢谢。

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

  3. 如果这样还是不能解决异步下载文件的问题吗?我还应该采取什么其他策略? 请提供一些示例代码或参考,以便我可以对其进行修改。

我花了7天时间处理这个复杂的需求,请帮忙!


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

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

我认为你滥用了intentservice. intentservice has a looper and a handler每次调用 start 都会为处理程序创建一条消息。所有消息都在队列中looper queue并一次提供一份。

您应该使用正常服务并且不要使用intentservice因为你想同时下载而不是一次下载一个。延长服务等级并在onCreate您可以创建多个线程的方法,每个线程都可以从中获取消息onStartCommand。我不想复制并粘贴文档示例,因为我认为最好再次阅读所有文档。如果您阅读它,您可以完全理解如何创建同时处理多个任务的服务,尽管它在示例中只创建了一个线程。

http://developer.android.com/guide/components/services.html

我想要的是创建一个后台服务来监视 总下载队列

我认为你不需要那个。就在你创建的时候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/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Android中使用intentservice同时下载多个文件? 的相关文章

  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • Intellij 中的 Google OR-Tools:UnsatisfiedLinkError

    我正在建立一个应该使用 Google OR Tools 的 java 框架 下面的代码编译成功 但在运行时抛出异常 Exception in thread main java lang UnsatisfiedLinkError com go
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • 带有 OpenId 提供程序的 Java Spring 安全性

    我有一个 spring MVC 应用程序 另一个客户端应用程序想要使用 open id connect 访问我的 spring 应用程序 如何在服务器端实现开放ID提供商 请帮忙 MITREid 连接 OpenID Connect Java
  • 如何构建自定义摄像机应用程序?

    我正在尝试开发一个自定义摄像机录像机 当我的设备在 Activity 的 beginRecording 中执行 start MediaRecorder 方法时 应用程序崩溃 我不知道出了什么问题 因为我遵循谷歌API指南 http deve
  • 我在 PopupMenu 中使用 ShareActionProvider,但显示两个 PopupMenu?

    我在 PopupMenu 中使用 ShareActionProvider 但是当我单击共享菜单项时 它会在屏幕上显示两个 PopupMenus 一个被另一个覆盖 一个显示应用程序图标和名称 另一个仅显示应用程序名称 除了这个问题之外 它工作
  • Android Gradle 同步失败:无法解析配置“:classpath”的所有工件

    错误如下 Caused by org gradle api internal artifacts ivyservice DefaultLenientConfiguration ArtifactResolveException Could n
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 如何在Android中创建一个简洁的两栏输入表单?

    我想创建一个整洁的两列输入表单 如下所示 到目前为止我的 xml 布局代码
  • 使用 DataBindingComponent 的 Inflate 方法

    当 Glide 成功渲染图像后 我在更新文本视图时看到此错误 致命异常 java lang IllegalStateException 必需 CustomBinding 类中的 DataBindingComponent 为 null 绑定适
  • 为什么这个私人浮动字段变为零?

    我有一些奇怪的行为 我很难向自己解释 称为 textureScale 的浮点字段变为零 如果某些代码正在更改该值 则可以解释这一点 然而 我希望能够通过将其设置为 私有最终浮点 来导致构建失败 或者至少是运行时异常 那么无论更改该值都将失败
  • 使用Intent拨打电话需要权限吗?

    在我的一个应用程序中 我使用以下代码来拨打电话 Intent intent new Intent Intent ACTION CALL Uri parse startActivity intent 文档说我确实需要以下清单许可才能这样做
  • 春季 CORS。在允许的来源中添加模式

    查看CORS的弹簧指南 以下代码启用所有允许的来源 public class MyWebMVCConfigurer extends WebMvcConfigurerAdapter Override public void addCorsMa
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 每次我们调用浏览器时,在 selenium 中使用 driver.manage().window().maximize() 是否好?

    We use driver manage window maximize 最大化浏览器 我在网上看到一些使用的例子driver manage window maximize 尽管不需要最大化浏览器 例如 gmail 登录 我还看到使用 se
  • 为什么应该首选 Java 类的接口?

    PMD https pmd github io 将举报以下违规行为 ArrayList list new ArrayList 违规行为是 避免使用 ArrayList 等实现类型 而是使用接口 以下行将纠正违规行为 List list ne
  • 将焦距(以毫米为单位)转换为像素 - Android

    在 Android 中 我当前正在访问camera s焦距通过使用getFocalLength in Camera1 Camera2不是一个选择 我正在尝试完全填充当前的计算 focal length pix focal length m

随机推荐

  • 如何优化从 PyCBitmap 到 OpenCV 图像的转换

    我有这段代码 它可以工作 但它运行速度非常慢 hwin win32gui GetDesktopWindow width win32api GetSystemMetrics win32con SM CXVIRTUALSCREEN height
  • C++中什么是引用变量?

    C 中引用变量的简要定义是什么 A 参考是一个实体 是另一个实体的别名object A 参考不是一个variable as a variable仅通过声明引入object An object是一个存储区域 在 C 中 引用 不一定 不占用任
  • 根据 SFTP 修改日期下载文件

    有没有办法使用 Tamir SharpSsh 从 SFTP 服务器获取基于修改日期的文件 目前我正在按文件名下载文件 但我的要求是按修改日期 var sftp new Sftp Host UserName Password sftp Con
  • 当触摸位于外部时,AlertDialog 消失 [Android] [重复]

    这个问题在这里已经有答案了 我在我的应用程序上使用警报对话框 但当用户触摸它之外时它会一直隐藏 这是我的代码 public class DialogMessageEnd extends DialogFragment String winne
  • php/Mysql 查询插入日期失败

    我已经搜索了很长一段时间 但我不明白为什么我的查询不适用于日期 我希望它作为日期导入到我的数据库中 这是上级的选择 所以我在这里 insert query INSERT INTO enrties datum VALUES mysql rea
  • Java本地方法源代码[重复]

    这个问题在这里已经有答案了 哪里可以下载java原生方法源代码 比如我想知道源码System arraycopy 但我找不到 您可以下载OpenJdk源代码here 在文件夹中jdk src share你可以获得源代码 jdk src sh
  • KeyBindings 和 KeyListener 之间的区别

    如果您可以这样做 那么 KeyBindings 的意义何在 Imports public void Test JButton button1 JButton button2 JButton button3 Test button1 new
  • 如何在JQuery中进行算术运算?

    var price addprice val var pass pass val var total totalprice attr value var left leftquota attr value var balance balan
  • JDBC 中的 EntityManager 刷新模式

    JPA 本质上是 JDBC 的更高抽象 EntityManager 有一个 API setAutoFlushMode 它可以设置为 AUTO 或 COMMIT 在 JDBC 术语中 这相当于什么 谢谢 JDBC 也具有自动提交功能 它们都用
  • Ant build.xml需要用户输入,但Eclipse没有tty

    我正在尝试将 Eclipse 与我的 build xml 更好地集成 我的构建文件为程序的本机部分调用 GNU Make 并且 Makefile 使用 sudo 将编译的库移动到系统路径中 不幸的是 这需要输入密码 并且 Eclipse 的
  • 安全地检查变量的类型

    对于系统 我需要将指针转换为 long 然后将 long 转换回指针类型 正如您可以猜到的那样 这是非常不安全的 我想做的是使用dynamic cast来进行转换 所以如果我混合它们 我会得到一个空指针 这一页说http publib bo
  • rabbitmq-server安装CentOS - Erlang错误

    我有centos 6并尝试使用rpm安装rabbitmq 3 5 3 没有 yum 选项 这让我陷入了错误 root osboxes CentOS rpm Uvh rabbitmq server 3 5 3 1 noarch rpm war
  • C++ 自定义操作返回空字符串

    我们在 C 中的延迟自定义操作方面遇到问题 我们只需要自定义操作数据属性 apacheconfpath 的值 该属性目前具有测试的虚拟值 这是我们的 C 自定义操作 UINT stdcall AppendToApacheConfigFile
  • Unity2D:缩放游戏对象而不缩放其子对象

    我有一个敌人 里面有孩子 敌人也有死亡动画 在死亡动画中 使用动画师 我将敌人缩放到适当的大小 然而 敌人内部的孩子也被缩小 即使我在孩子上有一个动画 我已经调整了它的大小 我还在这个孩子上添加了锚点位置 有没有办法既能缩小敌人的规模 又能
  • Azure 事件中心 - 异地恢复:它是否复制到次要区域?

    根据微软的文章 https learn microsoft com en us azure event hubs event hubs geo dr 根据设计 事件中心异地灾难恢复不会复制数据 因此您无法在辅助事件中心上重复使用主事件中心的
  • Node.js 错误:找不到模块“请求”

    好的 这是一个常见的错误 我已经读过这篇文章node js 找不到模块 请求 请求模块安装在我的node modules中 我的完整节点应用程序是 var r require request var s r http www foo com
  • PowerShell:GetNewClosure() 和带验证的 Cmdlet

    我试图了解 GetNewClosure 如何在 PowerShell 2 中的脚本 cmdlet 上下文中工作 本质上 我有一个返回对象的函数 如下所示 function Get AnObject param CmdletBinding P
  • 如何处理删除函数中的 GORM 错误?

    我有这个功能 var db gorm DB func DeleteCategory id uint error var category Category category ID id result db Delete category f
  • 运行 chrome 扩展并在页面加载时将数据提交到 PHP 脚本(自动化该过程)

    我第一次使用 chrome 扩展进行网络爬行 我在 HTML 弹出窗口中获取数据 然后在单击按钮时将其提交给 PHP 脚本 现在我想在页面加载时执行此功能 因此 页面加载数据将被收集并将其提交给 PHP 脚本 我正在使用如下扩展 清单 js
  • 如何在Android中使用intentservice同时下载多个文件?

    我想创建一项与此类似的服务 参考来自Here 在 Android 中异步下载多个文件 public static class DownloadingService extends IntentService public static St