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

Android 之 Service(一)启动,绑定服务,第1张

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

1.startService

①.定义一个类继承service

②.在manifest.xml文件中配置该service

③.使用context的startService(intent)启动该service

④.不再使用时,调用stopService(Intent)停止该服务

2.bindService

①.创建bindService服务渗盯前段,继承自service并在类中,创建一个实现binder接口的则禅实例对象并提供公共方法给客户端调用

②.从onbind()回调方法丛清返回此binder实例

③.在客户端中,从onserviceconnected()回调方法接收binder,并使用提供的方法调用绑定服务

android adb 启动activity、service,发送broadcast等运纤 *** 作

一、adb启动activity:

adb shellam start -n {包(package)名}/{包名}.{活动(activity)名称}

如:启动浏览器

adb shell am start -n com.android.browser/此困com.android.browser.BrowserActivity

二、adb关闭activity:

adb shellam force-stop {包(package)名}森悄念

如:关闭浏览器adb shellam force-stopcom.android.browser

三、adb启动service:

adb shellam startservice -n{包(package)名}/{包名}.{服务(service)名称}

如:启动自己应用中一个service

adb shellam startservice -n com.android.traffic/com.android.traffic.maniservice

四、adb卸载应用程序:

adb uninstall{包(package)名}

如:卸载浏览器adbuninstallcom.android.browser

五、adb发送broadcast:

adb shellam broadcast -a <广播动作>

如:发送一个网络变化的广播

adb shellam broadcast -a android.net.conn.CONNECTIVITY_CHANGE

六、adb端口转发:

adb shell am broadcast -a NotifyServiceStop

adb forward tcp:12580 tcp:10086

adb shell am broadcast -a NotifyServiceStart


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12355805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存