当前位置: 首页 > 知识库问答 >
问题:

Android:理解使用一个IntentService多个操作

盖嘉珍
2023-03-14

在特定的活动流下,我无法将意图交付给IntentService:这是一个场景:

  1. 考虑3个活动,Home、B和C。C有两个片段CF1和CF2
  2. B、 CF1和CF2使用相同的IntentService类,但操作不同
  3. IntentService开始使用startService(Intent)。(getActivity()。片段的startService(意图)
  4. 无论IntentService在哪里启动,如果它在Activity/Fragment的onStop()中运行,我都会使用stopService(intent)来确保它停止
  5. 如果活动流在家中-

我的理解是IntentService有一个意图队列。如果服务是第一次运行,则会调用onStartCommand(我们不应该为IntentService处理这个问题)。如果服务已经在运行,那么每次后续调用startService时都会调用OnHandleContent。

显然,我做错了什么,但不清楚是什么。我试着研究其他问题,但没有帮助。我使用的代码非常简单:

AndroidManifest。xml

<service android:name=".service.ExampleIntentService" />

活动B

@Override
public void onCreate(Bundle savedInstanceState)
{
       .......
       intent = new Intent(getApplicationContext(), ExampleIntentService.class);
       intent.setAction(StringConstants.ACTION_B);
       serviceRunning = true; //set to false in onReceiveResult 
       startService(intent);
}

@Override
public void onStop()
{
      if(serviceRunning && intent != null)
          stopService(intent)
}

片段CF1

@Override
public void onResume()
{
    super.onResume();

    intent = new Intent(getActivity(), ExampleIntentService.class);
    intent.setAction(StringConstants.ACTION_CF1);
    serviceRunning = true; //set to false in onReceiveResult 
    startService(intent);
}

@Override
public void onStop()
{
      if(serviceRunning && intent != null)
          stopService(intent)
}

代码与片段CF2完全相同

共有1个答案

邓正真
2023-03-14

我的理解是。。。如果服务是第一次运行,则会调用onStartCommand(我们不应该为IntentService处理这个问题)。如果服务已经在运行,那么每次后续调用startService时都会调用OnHandleContent。

否。onStartCommand()是为每个startService()调用调用的onHandleIntent()是为每个startService()调用IntentService而调用的,除非你在onStartCommand()中做了一些改变正常行为的事情。

IntentService开始使用startService(Intent)。

您可以使用starService()IntentService发送命令。

无论IntentService在哪里启动,我都会使用stopService(intent)确保它停止运行

这是一个非常糟糕的主意IntentService将在所有startService()调用处理完毕后自动停止,如文档中所述:

IntentService将接收意图,启动工作线程,并根据需要停止服务。

 类似资料:
  • 问题内容: 我想创建一个与此服务类似的服务(从Here引用),以在Android中异步下载多个文件。 用户可以选择不同片段中的下载项目。我的策略是,随着用户选择项目并按下下载按钮,这些项目将被传递到其中,负责下载文件。然后将下载任务添加到中。 这里有一些问题: 我知道是由某些已定义的操作触发的。但是我想要创建一个后台服务,监视,如果有新消息可用,那么将调用一些线程来操作任务。 如果我对这个定制商品

  • 本文向大家介绍Android IntentService详解及使用实例,包括了Android IntentService详解及使用实例的使用技巧和注意事项,需要的朋友参考一下 Android IntentService详解 一、IntentService简介 IntentService是Service的子类,比普通的Service增加了额外的功能。先看Service本身存在两个问题:  Servi

  • 我关心的是提高源代码可读性,并且它涉及到通过将庞大的方法分解成更小的(简洁的)方法来减小它们的大小。简单地说,我有一个非常完整的方法,它可以做很多不同的事情,例如: 我想将方法更改为: 我关心的是应用这种重构时的性能(时间和内存)。对于一个很小的人名单,当然不是问题,但是我担心的是这个名单的渐近增长。 例如,对于更老式的我可以看到以下影响: 我知道Java是如何将foreach指令转换为的。因此,

  • 我对IntentService的使用有点困惑。 文档中说,IntentService将发送给它的所有意图排队,并一次处理一个意图 我很确定我在文档中读到过这样的情况:系统只调用onStartCommand()一次,如果您发出两次startService(),第二次调用不会导致调用onStartCommand()<我可能错了,因为我一直在寻找这篇文档,但似乎找不到 这与之前的概念相矛盾,即可以通过o

  • 我需要创建一个并行执行多个操作的应用程序。我曾考虑过使用线程或线程池,但我以前从未使用过,所以我发现这相当困难。Thread应按以下方式工作: 所有系统应同时运行。你认为我应该如何实现这一点?

  • 我们目前正在使用Windows\Jenkins 2.107.1(无管道),我正在研究管道。我们有一个夜间构建作业,它从存储库中获取、提交和等待其他作业。我看到9个作业同时在同一主节点上运行(我们只有一个主节点)。我不清楚我们应该有一个Jenkinsfile还是多个Jenkinsfile。它不会是一个多分支管道,因为我们不会创建测试分支,然后再合并回主管道。在存储库中,我们有product1.0分支