当前位置:首页 » 安卓系统 » serviceandroid使用

serviceandroid使用

发布时间: 2025-01-19 00:21:26

Ⅰ android使用Service,什么时候使用bindService()好一点和什么时候使用startService()好一点

当需求是 比如就拿下载来说吧,下载必须是下载完,中间不能漏掉任何步骤,这时候比如使用bindService(),这时候你点一下返回键或者Home键(如果你的代码对返回键没有做特殊代码处理,比如按两次返回键退出),那么你的Service就挂掉了,虽然现在有的第三方库支持断点续传的功能,不过前提是用户再一次启动服务(就是点“继续下载”的按钮),有的用户不清楚手机,按了返回键(你的代码没对返回键做特殊处理)或者按了Home键,以为后台自动下载,所以像这类的,使用startService

Ⅱ Android 之 Service(一)启动,绑定服务

Service(服务)一个运行在后台执行长时间运行的操作组件,它不提供任何用户界面,作为与Activity同级的组件,它依旧是运行在主线程中。
其它组件可以启动一个Service,当这个Service启动之后便会在后台执行,这里需要注意,由于是在主线程中,所以我们需要另外开启一个线程来执行我们的耗时操作。
此外,一个组件还可以与一个Service进行绑定来实现组件之间的交互,甚至可以执行IPC(Inter-Process Communication)进程间通信。
Service可以在后台执行很多任务,比如处理网络事务,播放音乐,文件读写或者与一个内容提供者交互,等等。

本地服务(Local)
该服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外本地服务因为是在同一进程因此不需要IPC,也不需要AIDL。相应bindService会方便很多,当主进程被Kill后,服务便会终止。一般使用在音乐播放器播放等不需要常驻的服务。

远程服务(Remote Service)
该服务是独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。一般定义方式 android:process=":service" 由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。由于是独立的进程,会占用一定资源,并且使用AIDL进行IPC比较麻烦。一般用于系统的Service,这种Service是常驻的。

startService启动的服务
用于启动一个服务执行后台任务,不与组件进行通信,停止服务使用stopService。 当一个应用组件比如activity通过调用startService()来启动一个服务的时候,服务便处于启动状态。一旦启动,服务可以在后台无限期地运行下去,即使当启动它的组件已经销毁。通常情况下,一个启动的service执行一个单一的操作并且不会返回任何结果给调用者。

bindService启动的服务
用于启动的服务需要进行通信。停止服务使用unbindService。 当一个应用组件通过调用bindService()来与一个服务绑定时,服务便处于绑定状态。一个绑定的服务提供了一个客户端-服务器端接口来允许组件与服务进行交互,发送请求,得到结果甚至通过IPC进程间通信来完成操作。只有当其它组件与服务进行绑定时,服务才会处于绑定状态。多个组件可以同时与服务绑定,但是当他们全部都解除绑定时,服务就会销毁。

2.BindService:
如果一个Service在某个Activity中被调用bindService方法启动,不论bindService被调用几次,Service的 onCreate 方法只会执行一次,同时 onStartCommand 方法始终不会调用。当建立连接后,Service会一直运行,除非调用unbindService来接触绑定、断开连接或调用该Service的Context不存在了(如Activity被Finish——即通过bindService启动的Service的生命周期依附于启动它的Context),系统在这时会自动停止该Service。

3.StartService AND BindService:
当一个Service在被启动(startService 的同时又被绑定(bindService ),该Service将会一直在后台运行,并且不管调用几次, onCreate 方法始终只会调用一次, onStartCommand 的调用次数与startService 调用的次数一致(使用bindService 方法不会调用 onStartCommand )。同时,调用unBindService 将不会停止Service,必须调用stopService 或Service自身的stopSelf 来停止服务。

4.停止Service:
当一个服务被终止(stopService 、stopSelf 、unbindService )时, onDestory 方法将会被调用——所以我们需要在该方法中清除一些工作(依附该Service生命周期上的,比如:停止在Service中创建并运行的线程)。

1.创建服务

如果你才用的是 startService的方式那么 onBind方法可以忽略
2.注册服务

3.开启服务
start:

bind

绑定服务,一般涉及到组件或进程之间的通信,既然需要通信,那么我们肯定需要一个连接,这里ServiceConnection就是我们所需要的连接,通过Ibinder的传递,我们可以获取到Service的Ibinder对象,从而进行相关操作。

关于粘性服务,这里需要提到 Service的onStartCommand返回值

andorid:name

adroid:exported

android:enabled

android:label

android:process

android:icon

android:permission

关于服务,当我们在应用开发中,如果需要长时间的在后台运行,独立完成某一些事情的情况下,请使用Service!

此文综合: http://www.jianshu.com/p/1e49e93c3ec8 以及自己的一些问题看法,用作学习,回顾之用。

Service 前台服务
请参看 紫豪 http://www.jianshu.com/p/5505390503fa

热点内容
锐程cc蓝鲸版选什么配置 发布:2025-01-19 06:56:28 浏览:168
城镇居民医保卡的原始密码是多少 发布:2025-01-19 06:55:54 浏览:787
wifi密码如何修改密码 发布:2025-01-19 06:39:06 浏览:961
sqlserver认证 发布:2025-01-19 06:34:30 浏览:815
小米8se安卓p有什么功能 发布:2025-01-19 06:25:22 浏览:358
ucos和linux 发布:2025-01-19 06:24:06 浏览:470
关闭chrome缓存 发布:2025-01-19 05:43:55 浏览:830
修改svn服务器ip地址 发布:2025-01-19 05:32:00 浏览:441
iis服务器搭建出现404错误 发布:2025-01-19 05:26:39 浏览:312
怎么看在电脑里的配置 发布:2025-01-19 04:45:54 浏览:814