我在特定 Activity 流​​下无法将 Intent 传递给 IntentService 时遇到问题:这是场景:

  • 考虑 3 个 Activity ,Home、B 和 C。C 有 2 个 fragment CF1 和 CF2。
  • B、CF1 和 CF2 使用相同的 IntentService 类但具有不同的操作。
  • IntentService 使用 startService(Intent) 开始。 (getActivity().startService(Intent) for Fragments)
  • 无论 IntentService 在哪里启动,如果它在 Activity/Fragment 的 stopService(intent) 中运行,我都会确保它使用 onStop() 停止。
  • 如果 Activity 流是 Home -> C -> CF1 - >CF2,一切正常。
  • 如果 Activity 流是 Home -> B -> C -> CF1 -> CF2,那么 onHandleIntent 在从 CF2 的 startService(Intent) 之后永远不会被调用。 B 和 CF1 Intent 被处理。对于调试,我尝试通过在 Activity B 中等待 IntentService 完成,然后转到 CF1 -> CF2,仍然存在同样的问题。 CF1 在启动相同的 Intent 服务时似乎从来没有任何问题。当我尝试为 CF2 创建一个新的 IntentService 类时,它起作用了。

  • 我的理解是 IntentService 有一个 Intent 队列。如果服务是第一次运行,则调用 onStartCommand(我们不应该为 IntentService 处理)。如果服务已经在运行,则每次调用 startService 时都会调用 onHandleIntent。

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

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

    Activity 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)
    }
    

    fragment 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)
    }
    

    代码与 fragment 完全相同,CF2

    最佳答案



    不会。每次 onStartCommand() 调用都会调用 startService()onHandleIntent() 会针对对 startService() 进行的每个 IntentService 调用调用,除非您在 onStartCommand() 中执行某些操作以更改正常行为。



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



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

    关于Android:了解使用一个 IntentService 和多个操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14925063/

    10-13 04:40