我有一个问题,意图无法在特定的活动流程下传递到 IntentService:以下是场景:
1. 考虑三个活动,主页、B 和 C。C 有两个片段 CF1 和 CF2。 2. B、CF1 和 CF2 使用相同的 IntentService 类,但使用不同的操作。 3. 启动 IntentService 使用
我的理解是,IntentService 有一个意图队列。如果服务第一次运行,会调用 onStartCommand(我们不应该处理 IntentService)。如果服务已经运行,每次调用 startService 都会调用 onHandleIntent。
显然,我做错了什么,但不清楚是什么。我尝试查看其他 Stack Overflow 问题,但没有帮助。我使用的代码非常简单:
AndroidManifest.xml
1. 考虑三个活动,主页、B 和 C。C 有两个片段 CF1 和 CF2。 2. B、CF1 和 CF2 使用相同的 IntentService 类,但使用不同的操作。 3. 启动 IntentService 使用
startService(Intent)
。(对于片段,请使用 getActivity().startService(Intent))
4. 在 IntentService 启动的任何地方,如果它在 Activity/Fragment 的 onStop() 中运行,则确保使用 stopService(intent)
将其停止。
5. 如果活动流程是 Home -> C -> CF1 -> CF2,则一切正常。
6. 如果活动流程是 Home -> B -> C -> CF1 -> CF2,则在从 CF2 的 startService(Intent) 开始后,onHandleIntent 永远不会被调用。B 和 CF1 意图已处理。为了调试,我尝试等待 IntentService 在活动 B 中完成,然后进入 CF1 -> CF2,仍然存在相同的问题。CF1 似乎永远没有启动相同意图服务的任何问题。当我为 CF2 尝试创建一个新的 IntentService 类时,它能够工作。我的理解是,IntentService 有一个意图队列。如果服务第一次运行,会调用 onStartCommand(我们不应该处理 IntentService)。如果服务已经运行,每次调用 startService 都会调用 onHandleIntent。
显然,我做错了什么,但不清楚是什么。我尝试查看其他 Stack Overflow 问题,但没有帮助。我使用的代码非常简单:
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)
}
片段和CF2的代码完全相同