首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单独的意图服务是否在同一个线程上排队?

单独的意图服务是否在同一个线程上排队?
EN

Stack Overflow用户
提问于 2016-05-25 06:13:37
回答 2查看 592关注 0票数 5

我有两个意图服务- IntentServiceAIntentServiceB

它们有以下类定义:

代码语言:javascript
运行
复制
public class FirstService extends IntentService {
  public FirstService() {
      super("first_service");
  }

  @Override
  protected void onHandleIntent(Intent intent) {
      Log.d("chi6rag", "first starts");
      for (long i = 0l; i < 10000000l; i++) {
          if (i == 0l) Log.d("chi6rag", "first started");
      }
      Log.d("chi6rag", "first ends");
  }
}

代码语言:javascript
运行
复制
public class SecondService extends IntentService {
  public SecondService() {
      super("second_service");
  }

  @Override
  protected void onHandleIntent(Intent intent) {
      Log.d("chi6rag", "second starts");
      for (long i = 0l; i < 10000000l; i++) {
          if (i == 0l) Log.d("chi6rag", "second started");
      }
      Log.d("chi6rag", "second ends");
  }
}

如果在活动中执行以下代码:

startService(new Intent(this, IntentServiceA.class)); startService(new Intent(this, IntentServiceB.class));

我在日志中看到了以下内容:

D/chi6rag (11734): first starts

D/chi6rag (11734): first started

D/chi6rag (11734): second starts

D/chi6rag (11734): second started

D/chi6rag (11734): first ends

D/chi6rag (11734): second ends

当你看到意图服务文档时,它清楚地提到它将one intent at a time传递给IntentService的onHandleIntent方法

问:每个意图服务是否都有单独的工作线程?因为预期的日志是:

D/chi6rag (11734): first starts

D/chi6rag (11734): first started

D/chi6rag (11734): first ends

D/chi6rag (11734): second starts

D/chi6rag (11734): second started

D/chi6rag (11734): second ends

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-25 06:35:21

IntentService执行以下操作:

  1. 创建一个默认工作线程,该线程执行与应用程序主线程分离的传递给onStartCommand()的所有意图。
  2. 创建一个工作队列,它一次将一个意图传递给onHandleIntent()实现,因此您不必担心 多线程
  3. 提供onStartCommand()的默认实现,它将意图发送到工作队列,然后发送到您的onHandleIntent()实现。

由于您有多个类,扩展表单IntentService,每个类都有各自的特定onHandleIntent。这些操作在单独的工作队列中处理。

请参阅扩展Intentservice

票数 5
EN

Stack Overflow用户

发布于 2016-05-25 06:37:43

看看这些文档:IntentService

所有请求都是在一个工作线程上处理的--它们可能需要尽可能长的时间(并且不会阻塞应用程序的主循环),但是一次只处理一个请求。

AFAIK,所有请求都将在单个线程per IntentService上处理。这意味着,如果创建了许多IntentService,就不能保证首先执行IntentService的线程。

如果您想在单个线程中运行多个线程或按顺序工作,请尝试像在ExecutorService中那样使用Executors.newSingleThreadExecutor()runnable来播放ExecutorService实例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37429107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档