Nếu bạn muốn sử dụng dịch vụ để thực hiện các hành động khác nhau, thì việc khai báo bộ lọc ý định sẽ giúp dịch vụ của bạn khớp với các hành động khác nhau mà bạn muốn thực hiện.
Ví dụ sẽ giải thích rõ hơn.
Giả sử bạn đã sau lời tuyên bố trong file manifest:
<service
android:name="MyService" >
<intent-filter>
<action android:name="com.x.y.DOWNLOAD_DATA" />
<action android:name="com.x.y.UPLOAD_DATA" />
</intent-filter>
</service>
Sau đó, trong bạn IntentService
bạn có thể lọc cho những hành động như thế này:
public class MyService extends IntentService {
public MyService() {
super("MyService");
}
@Override
protected void onHandleIntent(Intent intent) {
if(intent.getAction().equals("com.x.y.DOWNLOAD_DATA"){
//download data here
}else if(intent.getAction().equals("com.x.y.UPLOAD_DATA"){
// upload data here
}
}
}
Về cơ bản, nó cho phép bạn sử dụng dịch vụ tương tự cho nhau hành động, thay vì tạo hai dịch vụ riêng biệt chẳng hạn.
Tuy nhiên, có bộ lọc ý định tuyên bố một dịch vụ không được coi là một thực hành tốt, và đây là những gì các tài liệu đã nói:
Chú ý: Để đảm bảo ứng dụng của bạn được an toàn, luôn luôn sử dụng một rõ ràng ý định khi bắt đầu Dịch vụ và không khai báo các bộ lọc ý định cho các dịch vụ của bạn. Sử dụng ý định ngầm để bắt đầu một dịch vụ là một mối đe dọa an ninh vì bạn không thể chắc chắn dịch vụ nào sẽ phản hồi mục đích và người dùng không thể thấy dịch vụ nào bắt đầu.
Nguồn
2013-07-30 07:14:23
đẹp Giải thích –
nhờ nó thực sự đã giúp tôi !! – joseRo
Nhưng nếu tôi bắt đầu một dịch vụ như vậy với một hành động không có trong '', dịch vụ sẽ bắt đầu và thực hiện công việc của nó. Vì vậy, phải có một cái gì đó như 'if (action.equals (ACT_1)) {// Do task # 1} else if (action.equals (ACT_2)) {// Do task # 2} else {throw IllegalArgumentException (" Bất hợp pháp hành động "+ hành động);}' –