💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
四大组件之一的Service,其定义非常符合C/S架构中Service的概念,即为Client服务,处理Client的请求。在Android中,目前接触最多的是Binder中的C/S架构。在这种架构中,Client通过调用预先定义好的业务函数向对应的Service发送请求。作为四大组件之一Service,其响应Client的请求方式有两种: - Client通过调用startService向Service端发送一个Intent,该Intent携带请求信息。而Service的onStartCommand会接受该Intent,并处理之。该方式是Android平台特有的,借助Intent来传递请求。 - Client调用bindService函数和一个指定的Service建立Binder关系,即绑定成功后,Client端将得到处理业务逻辑的Binder Bp端。此后Client直接调用Bp端提供的业务函数向Service端发出请求。注意,在这种方式中,Service的onBind函数被调用,如果该Service支持Binder,需返回一个IBinder对象给客户端。 以上介绍的是Service响应客户端请求的两种方式,务必将两者分清楚。此外,这两种方式还影响Service对象的生命周期,简单总结如下: - 对于以startService方式启动的Service对象,其生命周期一直延续到stopSelf或stopService被调用为止。 - 对于以bindService方式启动的Service对象,其生命周期延续到最后一个客户端调用完unbindService为止。 * * * * * **注意**:生命周期控制一般都涉及引用计数的使用。如果某Service对象同时支持这两种请求方式,那么当总引用计数减为零时,其生命就走向终点。 * * * * * 和Service相关的知识还有,当系统内存不足时,系统如何处理Service。如果Service和UI某个部分绑定(例如类似通知栏中Music播放的信息),那么此Service优先级较高(可通过调用startForeground把自己变成一个前台Service),系统不会轻易杀死这些Service来回收内存。 以上这些内容都较简单,阅读SDK文档中Service的相关说明即可了解,具体路径为SDK路径/docs/guide/topics/fundamentals/services.html。