Android Service使用关键点

Service的2种类型:
1. 通过调用startService()来启动服务,就能在后台一直运行下去,即使启动它的组件已经被销毁了。 通常,started的服务执行单一的操作并且不会向调用者返回结果。所以,必须用stopSelf()或stopService()进行终止。不论调用了多少次startService(),只需要调用一次stopService()来停止服务。

2. 通过调用bindService()绑定到服务上,允许组件与服务进行交互、发送请求、获取结果,甚至可以利用进程间通信(IPC)跨进程执行这些操作。绑定服务的生存期和被绑定的应用程序组件一致。多个组件可以同时与一个服务绑定,不过所有的组件调用unbindService()解除绑定后,服务也就会被销毁。
注意:通过startService()来启动的服务也可以通过调用bindService()被绑定,此时stopService()或stopSelf()不会真的终止服务,除非所有的客户端都解除了绑定。

manifest中定义的属性:
android:exported
是否允许任何应用程序组件都使用此服务
默认值取决于<service>是否包含<intent-filter>,如果不包含,则默认值为false,反之则为true。也可以使用permission权限控制来达到相同的目的。
android:permission
标识此Service的调用权限,如果没有设置,则默认使用<application>的权限设置。
android:process
标识该Service将运行在哪个进程中。如果以“:”开头,Service是Applicaiton的私有进程;以包名形式,Sevice是全局进程。

请注意onStartCommand()方法必须返回一个整数,描述系统在杀死服务之后应该如何继续运行:
START_NOT_STICKY  
杀死服务后,不会重建,除非还存在未发送的intent。 当服务不再是必需的,并且应用程序能够简单地重启那些未完成的工作时,这是避免服务运行的最安全的选项。
START_STICKY  
杀死服务后,将重建服务并调用onStartCommand(),但不会再次送入上一个intent,而是用null intent来调用onStartCommand() 。除非还有启动服务的intent未发送完,那么这些剩下的intent会继续发送。 这适用于媒体播放器(或类似服务),它们不执行命令,但需要一直运行并随时待命。
START_REDELIVER_INTENT  
杀死服务后,将重建服务并用上一个已送过的intent调用onStartCommand()。任何未发送完的intent也都会依次送入。这适用于那些需要立即恢复工作的活跃服务,比如下载文件。

IntentService是Service类的子类,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给IntentService,IntentService通过worker thread处理每个Intent对象,执行完所有的工作之后自动停止Service。不需要主动调用stopSelft()来结束服务。

具体参考:
http://android-doc.com/guide/components/services.html
http://android-doc.com/guide/components/bound-services.html

你可能感兴趣的:(Android Service使用关键点)