来自Android开发人员:"组件(服务)通过意图过滤器宣传他们的能力 - 他们可以响应的意图类型.
我只是无法理解Manifest.xml中服务内部意图过滤的目的,这里的功能是什么?
<service
android:name="com.x.y"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="com.x.y" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
如果我删除了intent-filter,他的区别是什么?
<service
android:name="com.x.y"
</service>
Run Code Online (Sandbox Code Playgroud)
谢谢.
And*_*Res 43
如果要使用服务执行不同的操作,则声明意图过滤器将帮助您的服务与您要执行的不同操作相匹配.
这个例子会更好地解释.
假设您在清单文件中有以下声明:
<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>
Run Code Online (Sandbox Code Playgroud)
然后IntentService你可以过滤这些动作,如下所示:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,它允许您对不同的操作使用相同的服务,而不是创建两个单独的服务.
但是,为服务声明的意图过滤器不被视为一种好的做法,这就是文档必须说的:
警告:为确保您的应用程序安全,请始终在启动服务时使用明确的意图,并且不要为您的服务声明意图过滤器.使用隐式意图启动服务存在安全隐患,因为您无法确定哪些服务将响应意图,并且用户无法查看启动哪个服务.
| 归档时间: |
|
| 查看次数: |
22912 次 |
| 最近记录: |