我正在关注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));
一方与另一方相比有什么优势?
答案 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);
}