Android service

来源:互联网 发布:淘宝上的苹果官网 编辑:程序博客网 时间:2024/05/20 01:10

链接:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html
2、Service 与 Thread(线程) 的区别

Thread在Activity不方便控制,Service只会创建一次,可在里边使用Thread.
-注:Service运行在住线程中

startService:

startService 方法多次启动,那么onCreate方法只会调用一次,onStartCommand将会被调用多次。直到被调用stopService,或自身的stopSelf方法。当然如果系统资源不足,android系统也可能结束服务。

bindService

bindService 方法绑定启动,不管调用 bindService 调用几次,onCreate方法都只会调用一次,同时onStartCommand方法始终不会被调用。当连接建立之后,Service将会一直运行,除非调用Context.unbindService 断开连接或者之前调用bindService 的 Context 不存在了(如Activity被finish的时候),系统将会自动停止Service,对应onDestroy将被调用。通过 ServiceConnection 接口来取得建立连接,获取服务对象

startService 和 bindService 一块使用

unbindService与stopService同时调用来停止服务

Remote 服务

android:process=”:remote”,服务会运行在另一个进程中。不会阻塞主线程。与Activity交互时需要使用AIDL

前台服务

在服务中使用Notification.xxxForeground是服务成为前台服务
注意在 sdk 2.0 及其以后版本使用的方法是 startForeground 与 stopForeground,之前版本使用的是 setForeground
- 注:1、使用 startForeground ,如果 id 为 0 ,那么 notification 将不会显示。

注意:

  • 1、手机屏幕的旋转会是bindService停止,旋转后Activity会重新创建##
  • 2、对多个client绑定同一个service时,所有client调用 unbindService后service才停止

在什么情况下使用 startService 或 bindService 或 同时使用startService 和 bindService

如果你只是想要启动一个后台服务长期进行某项任务那么使用 startService 便可以了。如果你想要与正在运行的 Service 取得联系,那么有两种方法,一种是使用 broadcast ,另外是使用 bindService ,前者的缺点是如果交流较为频繁,容易造成性能上的问题,并且 BroadcastReceiver 本身执行代码的时间是很短的(也许执行到一半,后面的代码便不会执行),而后者则没有这些问题,因此我们肯定选择使用 bindService(这个时候你便同时在使用 startService 和 bindService 了,这在 Activity 中更新 Service 的某些运行状态是相当有用的)。另外如果你的服务只是公开一个远程接口,供连接上的客服端(android 的 Service 是C/S架构)远程调用执行方法。这个时候你可以不让服务一开始就运行,而只用 bindService ,这样在第一次 bindService 的时候才会创建服务的实例运行它,这会节约很多系统资源,特别是如果你的服务是Remote Service,那么该效果会越明显(当然在 Service 创建的时候会花去一定时间,你应当注意到这点)。

在 AndroidManifest.xml 里 Service 元素的常见选项

  • android:name  ————-  服务类名
  • android:label  ————–  服务的名字,如果此项不设置,那么默认显示的服务名则为类名
  • android:icon  ————–  服务的图标
  • android:permission  ——-  申明此服务的权限,这意味着只有提供了该权限的应用才能控制或连接此服务
  • android:process  ———-  表示该服务是否运行在另外一个进程,如果设置了此项,那么将会在包名后面加上这段字符串表示另一进程的名字
  • android:enabled  ———-  如果此项设置为 true,那么 Service 将会默认被系统启动,不设置默认此项为 false
  • android:exported  ———  表示该服务是否能够被其他应用程序所控制或连接,不设置默认此项为 false
0 0
原创粉丝点击