android - 后台工作 - 服务、线程或两者

标签 android multithreading service background handler

因此,我正在开发一个 Android 应用程序,作为其流程的一部分,该应用程序从网站获取数据。其中一些数据是图像。我想缓存数据。我知道我需要在后台执行此操作,但很困惑如何进行此操作。我希望每个 Activity 都可以访问背景部分。我想我需要将此功能放入后台运行的服务中。我是否还需要创建一个新线程,或者我可以在服务中隐式执行此操作吗?

我读过有关使用 Handler 和 Looper 的内容。这些需要集成到服务中吗?或者我应该只使用那些?

编辑:

可能是我没说清楚。我想从将在我的设备上显示的网页获取数据。我发现了一个“惰性列表”图像加载的示例,看起来很有希望,但有一些缺点。它设置了一个图像队列,每次下载一张图像,然后更新 ListView 。但它只是一个线程。

似乎为每张图像制作一个新的图像有点毫无意义。我正在尝试修改它以允许从多个 Activity 进行访问。我也想使用正确的结构。从阅读来看,Looper 和 Handler 似乎就是为此而设计的。

最佳答案

您似乎有几个要求:

  1. 缓存适量的互联网数据
  2. 在后台动态获取此数据
  3. 在多项 Activity 中使用此数据
  4. 能够处理多个并发请求

第 2 点建议,如果您不想影响 UI 线程的性能,则需要一个单独的线程。第 3 点表明您需要一项服务。第 1 点和第 4 点表明某种队列可能有用。

结合所有这些的一个类是 IntentService 。看看那个。它基本上在工作线程的后台排队和处理请求。由于都是互联网数据,您只需向其传递一个带有 URI 的 Intent,然后就可以让 IntentService 为您进行下载。您可能想传递 ResultReceiver其目的是,当下载完成时,您可以向 Activity 发回信号,表明您已完成该 URI。

关于android - 后台工作 - 服务、线程或两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6408520/

相关文章:

android - 适用于 Android 的 Olingo OData 2.0 - 对 javax.xml.stream.XMLInputFactory 的依赖

android - 在Android中将WAV文件转换为矢量

android - Intellij无法将目录识别为测试

Java - 具有嵌入式线程错误的 While 循环

multithreading - 在 Grails 服务中管理线程

Android - 将事件通知传递给可能不活跃的 Activity 的有效方法?

java - 我想从下一个 Activity 传递复选框值,但它抛出 NullPointerException

linux - sed 行删除是原子的吗?

java - 在 Java 中运行超过 1K 线程安全吗?

c# - 在 WCF (C#) 中引用服务时出现问题