我在特定 Activity 流下无法将 Intent 传递给 IntentService
时遇到问题:这是场景:
startService(Intent)
开始。 (getActivity().startService(Intent) for Fragments) stopService(intent)
中运行,我都会确保它使用 onStop()
停止。 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()
中执行某些操作以更改正常行为。
您可以使用 IntentService
向 startService()
发送命令。
这是一个非常糟糕的主意。 IntentService
将在所有 startService()
调用处理完毕后自行停止,如 the documentation 中所述:
关于Android:了解使用一个 IntentService 和多个操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14925063/