2010-06-25 85 views
5

我下面的教程來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> 

現在開始在廣播接收器MyStartupIntentReceiver的方法的onReceive此服務as

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)); 

相比其他什麼一個優勢?

回答

7

假設這是全部在一個應用程序中,您可以使用後一種形式(MyService.class)。

與其他人相比,它有什麼優勢?

如果您希望第三方啓動此服務,我會使用自定義操作字符串。

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); 
} 
相關問題