绑定服务
1、服务()Android中的四大组件之一它能够长期在后台运行且不提供用户界面即使用户到另一应用程序,服务仍可以在后台运行
服务的特点
Service在后台运行,不用与用户进行交互
即使程序被切换到后台,或者用户打开新的应用,服务仍可运行
服务并非运行在独立的进程中,而是依赖于创建服务的应用程序进程。如果某个应用进程被杀掉
在默认情况下, Service运行在应用程序进程的主线程线程中,如果需要在
Service中处理些网络连接等耗时的操作,那么应该将这些任务放在 Service的分线程中处理,避免阻塞用户界面
创建服务
自定义类继承 Service AndroidManifest xm中注册服务
2、服务的生命周期
1、 startService方式开启服务的生命周期
服务会执行 onCreate()→onStartCommand(方法,服务处于运行状态,直到自身调用 stopSelf()方法或者其他组件调用 stopService方法时服务停止,最终被系统销毁。
服务会长期的在后合运行,并且服务的状态与开启者的状态没有关系。
2、 bindService方式开启服务的生命周期
服务会执行 onCreate()→onBind()方法,服务处于绑定状态,客户端通过 unbindService()方法关闭连接,解除绑定时,系统将直接销毁服务。服务与开启者的状态有关,当调用者销毁了,服务也会被销毁。
3、服务端:绑定服务
//1.构建工ntent对象
intentanew Intent(MainActivity, this, Myservice.class):
/调用定方法 onCreate--on8inder-ServiceConncion接口里的 onServiceConnected
//MyService s=new MyserviceO:
bindservice(intent, conn, Service.BIND_AUTO_CREATE):
创建自定义连接类,实现 ServiceConnection接口,重写接口方法。
class Myserviceconnection implements Serviceconnection
/服务端与服务连接成功系统会调用该方法 IBinder service传递过来 override
public void onserviceConnected(componentNa name, Ieinder service)
System.out. printIn("onServiceConnected..."):
Myservice. MyIBinder binder= (Myservice MyIBinder) service; binder.testO;
]
/意外中断连接调用该方法解绑不会调用该方法 @override
public void onServiceDisconnected(componentName name){
System. out. printIn("onServiceDisconnect...."):
运行流程
//1.构建工ntent对象
intentanew Intent(MainActivity, this, Myservice.class):
/调用定方法 onCreate--on8inder-ServiceConncion接口里的 onServiceConnected
//MyService s=new MyserviceO:
bindservice(intent, conn, Service.BIND_AUTO_CREATE):
创建自定义连接类,实现 ServiceConnection接口,重写接口方法。
class Myserviceconnection implements Serviceconnection
/服务端与服务连接成功系统会调用该方法 IBinder service传递过来 override
public void onserviceConnected(componentNa name, Ieinder service)
System.out. printIn("onServiceConnected..."):
Myservice. MyIBinder binder= (Myservice MyIBinder) service; binder.testO;
]
/意外中断连接调用该方法解绑不会调用该方法 @override
public void onServiceDisconnected(componentName name){
System. out. printIn("onServiceDisconnect...."):
运行流程
4、远程服务通信
远程服务通信是通过ADL(Android Interface Definition Language实现的,它是一种接口定义语言(nterface Definition Language),其语法格式非常简单,与Java中定义接口很相似。
定义好AIDL接口之后,接着需要在应用程序中创建 Service的子类该 ServiceonBind的方法所返回的 IBinder对象应该是ADT所生成的 IService.stub的子类
远程服务
注册文件配置:Android:process=“:remote”
和主线程分离;
服务销毁
如果启动服务:startservice()binservice(intent,com,service。BIND_AUTO-CREATE);同时都使用了,只单击某一个stopservice,unbinservice停止都不会调用onDestroy()必须这个停止方法都点击一次
©著作权归作者所有:来自51CTO博客作者wx5db39f8c13594的原创作品,如需转载,请注明出处,否则将追究法律责任更多相关文章
- 广播和服务
- PHP: 解析pathinfo(从url解析控制器和方法) 和 cUrl的简单应用
- PHP文件上传实战案例和MVC依赖注入和服务容器
- Java开发必须掌握的 20+ 种 Spring 常用注解
- 你还在 Java 代码中写 set/get 方法?赶快试试这款插件吧!
- Spring Cloud OAuth 微服务内部Token传递的源码实现解析
- 微服务架构必备—mica,开源 pro 全部功能
- 解决 nacos 在 Spring boot admin 中不能监控到新服务注册的问题
- mica 微服务核心组件 1.0.0 正式版发布