启动服务时是否需要添加intent-filter?

时间:2010-06-25 21:47:18

标签: android service intentfilter

我正在关注setup a service to start on boot的教程,其中最后一段代码是:

在AndroidManifest.xml中输入此服务作为

<service android:name="MyService">
<intent-filter>
<action
android:name="com.wissen.startatboot.MyService" />
</intent-filter>
</service>

现在在BroadcastReceiver MyStartupIntentReceiver的onReceive方法中启动此服务为

public void onReceive(Context context, Intent intent) {
    Intent serviceIntent = new Intent();
    serviceIntent.setAction("com.wissen.startatboot.MyService");
    context.startService(serviceIntent);

}

如您所见,它使用了intent-filters,并在启动时添加了操作。 我可以使用

吗?
startService(new Intent(this, MyService.class));

一方与另一方相比有什么优势?

2 个答案:

答案 0 :(得分:7)

假设这一切都在一个应用程序中,您可以使用后一种形式(MyService.class)。

  

一方与另一方相比有什么优势?

如果您希望第三方启动此服务,我会使用自定义操作字符串。

答案 1 :(得分:0)

正如我在comment中已经提到的,行动可能是有用的自我测试。例如,服务执行许多任务。对于每项任务都有一个动作。如果服务以未知操作启动,则会抛出IllegalArgumentException

我通常在onStartCommand中使用这种方法。

String action = intent.getAction();
if (action.equals(ACT_1)) { 
    // Do task #1
} else if (action.equals(ACT_2)) {
    // Do task #2
} else { 
    throw IllegalArgumentException("Illegal action " + action);
}