Pra*_*nna 3 android intentservice
我有一个问题,意图没有交付给IntentService特定的活动流程:这是场景:
startService(Intent).(片段的getActivity().startService(Intent))stopService(intent)如果它在Activity/Fragment中运行,我确保它被停止使用onStop().onHandleIntent则从CF2的startService(Intent)之后永远不会调用.处理B和CF1意图.为了调试,我尝试等待IntentService在Activity B中完成,然后转到CF1 - > CF2,仍然是同样的问题.CF1在启动相同的意向服务时似乎没有任何问题.当我尝试IntentService为CF2 创建一个新类时,它起作用了.我的理解是IntentService有一个意图队列.如果服务第一次运行,则调用onStartCommand(我们不应该为IntentService处理).如果服务已在运行,则会为每次后续的startService调用调用onHandleIntent.
显然,我做错了什么但不清楚是什么.我试过调查其他stackoverflow问题,但没有帮助.我正在使用的代码非常简单:
AndroidManifest.xml中
<service android:name=".service.ExampleIntentService" />
Run Code Online (Sandbox Code Playgroud)
活动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)
}
Run Code Online (Sandbox Code Playgroud)
片段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)
}
Run Code Online (Sandbox Code Playgroud)
片段CF2的代码完全相同
我的理解是......如果服务第一次运行,则调用onStartCommand(我们不应该为IntentService处理).如果服务已在运行,则会为每次后续的startService调用调用onHandleIntent.
号onStartCommand()被每startService()通话.除非你做一些改变正常行为的事情,否则onHandleIntent()会调用每次startService()调用.IntentServiceonStartCommand()
IntentService使用startService(Intent)开始.
您将命令发送到IntentService使用startService().
无论IntentService何处开始,我都确保使用stopService(intent)停止它
这是一个非常糟糕的主意.在处理完IntentService所有startService()调用后,它将自行停止,如文档中所述:
IntentService将接收Intents,启动工作线程,并根据需要停止服务.
| 归档时间: |
|
| 查看次数: |
6333 次 |
| 最近记录: |