Android之service详解
来源:互联网 发布:linux日志查询命令 编辑:程序博客网 时间:2024/05/16 10:02
一.服务的生命周期:
1.采用start的方式开启服务
生命周期如下: onCreate()-->oonStartCommand(){onStart()过时了}---> onDestory()
注:如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand();服务停止的时候 onDestory().
服务只会被停止一次。
服务只会被停止一次。
2.服务还有一种开启方式,绑定的方式开启服务。
onCreate() --->onBind();--->onunbind()-->onDestory();
绑定服务不会调用onstart或者onstartcommand方法;
简单解释 一个:这种绑定服务可以调用服务中的方法,首先服务要有一个方法,然后暴露一个中间人,activity通过绑定服务bindService();建立连接。服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象。通过中间人来调用service里的方法。
2.1:AIDL进程间的通信{AIDL:android interface definition language 安卓接口定义语言}
远程服务:调用者和服务在不同的工程代码里面。
本地服务:调用者和服务在同一个工程代码里面。每一个应用程序都是运行在自己独立的进程里面的。进程操作系统分配内存空间的一个单位。进程的数据都是独立的。独立的内存空间。aidl文件都是公有的,没有访问权限修饰符 . IPC: inter process communication 进程间通讯
绑定本地服务调用方法的步骤:
1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
private class MiddlePerson extends Binder implements IMiddlePerson{}
2.实现服务的onbind方法,返回的就是中间人 MiddlePerson
3.在activity 绑定服务。bindService();
4.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象
5.强制类型转化 调用接口里面的方法。
绑定远程服务调用方法的步骤:
1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
2.把暴露的接口文件的扩展名改为aidl文件 去掉访问修饰符 public
private class MiddlePerson extends IMiddlePerson.Stub{} IPC的子类
3.实现服务的onbind方法,返回的就是中间人 IMiddlePerson
4.在activity 绑定服务。bindService();
5.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象
6.IMiddlePerson.Stub.asInterface(binder) 调用接口里面的方法。
两种开启服务方法的区别。
start方式开启服务: 一旦服务开启跟调用者(开启者)就没有任何关系了。开启者退出了,开启者挂了,服务还在后台长期的运行。开启者没有办法去调用服务里面的方法。(美国的司法独立)bind的方式开启服务:绑定服务,调用者挂了,服务也会跟着挂掉。不求同时生,但求同时死。
开启者可以调用服务里面的方法。
本地服务:调用者和服务在同一个工程代码里面。
绑定本地服务调用方法的步骤:
1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
private class MiddlePerson extends Binder implements IMiddlePerson{}
2.实现服务的onbind方法,返回的就是中间人 MiddlePerson
3.在activity 绑定服务。bindService();
4.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象
5.强制类型转化 调用接口里面的方法。
1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
private class MiddlePerson extends Binder implements IMiddlePerson{}
2.实现服务的onbind方法,返回的就是中间人 MiddlePerson
3.在activity 绑定服务。bindService();
4.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象
5.强制类型转化 调用接口里面的方法。
绑定远程服务调用方法的步骤:
1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
2.把暴露的接口文件的扩展名改为aidl文件 去掉访问修饰符 public
private class MiddlePerson extends IMiddlePerson.Stub{} IPC的子类
3.实现服务的onbind方法,返回的就是中间人 IMiddlePerson
4.在activity 绑定服务。bindService();
5.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象
6.IMiddlePerson.Stub.asInterface(binder) 调用接口里面的方法。
开启者可以调用服务里面的方法。
还有一种是:混合调用的服务
其生命周期:
服务长期后台运行,又想调用服务的方法:
1.start方式开启服务(保证服务长期后台运行)
2.bind方式绑定服务(保证调用服务的方法)
3.unbind解除绑定服务
注意:
1.默认情况下 没有制定service所运行的进程,Service与Acticity是运行在当前app所在进程的ui主线程中的。
2.sevice里面不能执行耗时操作。
特殊情况:
特殊情况:
可以在清单文件配置 service 执行所在的进程 ,让service在另外的进程中执行
3IntentService. http://blog.csdn.net/lmj623565791/article/details/47143563
使用了IntentService最起码有两个好处,一方面不需要自己去new Thread了;另一方面不需要考虑在什么时候关闭该Service了
4.service里可以弹toast.因为sevice是Context的子类。
0 0
- android之Service详解
- Android 之 Service 详解
- Android之service详解
- Android之 Service详解
- Android service 之Remote Service详解
- android开发之service详解
- Android Service详解之生命周期
- android基础之service详解
- Android之Android下service详解
- android之Service详解(转载)
- Android四大组件之---Service(服务)详解
- android之service和Intentservice详解
- Android开发学习之Service详解一
- Android开发学习之Service详解二
- Android 四大组件之Service详解
- Android开发之Service服务详解
- Android四大组件之Service详解
- Android中的四大组件之Service详解
- git 标签管理
- 第十六周项目 阅读程序(4)
- Bzoj4556: [Tjoi2016&Heoi2016]字符串
- 八数码的启发式搜索
- 七牛---Java SDK常见问题总结
- Android之service详解
- 约瑟夫问题解决方案
- 第14周项目2-两个成员的类模板(2)
- java继承之属性与方法访问
- 关于ROS安装快而简洁的办法~适合初学者或无开发经验者“10分钟”即可搞定
- 图片拉伸
- Ubuntu 14.04 Web服务器,Apache的安装和配置
- Servlet 从小例子开始
- OpenResty学习笔记(三) 模块