Service的生命周期&Service绑定方法

服务的生命周期:

一、采用start的方式开启服务

生命周期如下:

开启服务: onCreate()--> onStartCommand() (onStart()过时了)---> onDestory();

如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand();

服务停止的时候 onDestory().

服务只会被停止一次

二、采用绑定的方式开启服务。
onCreate() --->onBind()--->onunbind()-->onDestory()
绑定服务不会调用onstart或者onstartcommand方法

混合调用的服务的生命周期:
需求:服务长期后台运行,又想调用服务的方法:
1.start方式开启服务(保证服务长期后台运行)
2.bind方式绑定服务(保证调用服务的方法)
3.unbind解除绑定服务
4.stopService停止服务。

三、两种开启服务方法的区别。

start方式开启服务。 一旦服务开启后就跟调用者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运行。
开启者没有办法去调用服务里面的方法。

bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。
但是开启者可以调用服务里面的方法。

--------------------------------------------------------------------------------------------

远程服务&本地服务

远程服务:调用者和服务在不同的工程代码里面。
本地服务:调用者和服务在同一个工程代码里面。

每一个应用程序都是运行在自己独立的进程里面的。
进程是操作系统分配内存空间的一个单位。进程的数据都是独立的。

绑定远程服务需要用到aidl文件
aidl:android interface definition language 安卓接口定义语言
aidl文件都是公有的,没有访问权限修饰符
(IPC: inter process communication 进程间通讯)

绑定本地服务调用方法的步骤:
1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
private class MyBinder extends Binder implements IMyBinder{}
2.实现服务的onbind方法,返回的就是MyBinder
3.在activity 绑定服务。bindService();
4.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象
5.强制类型转换,调用接口里面的方法。

绑定远程服务调用方法的步骤:
1.在服务的内部创建一个内部类 提供一个方法,可以间接调用服务的方法
2.把暴露的接口文件的扩展名改为aidl文件 去掉访问修饰符 public
private class MyBinder extends IMyBinder.Stub{}  (IPC的子类)
3.实现服务的onbind方法,返回的就是MyBinder
4.在activity 绑定服务。bindService();
5.在服务成功绑定的时候 会执行一个方法 onServiceConnected 传递过来一个 IBinder对象
6.IMyBinder.Stub.asInterface(binder),调用接口里面的方法。

时间: 2024-10-05 04:44:53

Service的生命周期&Service绑定方法的相关文章

18_Android中Service的生命周期,远程服务,绑定远程服务,aidl服务调用

?? 1 绑定服务(本地的方式),要做如下的案例: 操作步骤:"先点击绑定服务",再点击"调用服务里面的方法",然后查看服务的执行情况. 2编写Android清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" pack

Android activity和service的生命周期对比

1Activity生命周期 七个方法 1. void onCreate(Bundle savedInstanceState) 当Activity被第首次加载时执行.我们新启动一个程序的时候其主窗体的onCreate事件就会被执行.如果Activity被销毁后(onDestroy后),再重新加载进Task时,其onCreate事件也会被重新执行. 2. void onStart()   activity变为在屏幕上对用户可见时调用. 3. void onResume()   activity开始与

Android Service的生命周期

service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它. 当service被停止时,系统会销毁它. A bound service 被绑定的service是当其他组件(一个客户)调用bindService()来创建的. 客户可以通过一

Activity和Service的生命周期(图)

1.Activity的生命周期 情形一.一个单独的Activity的正常的生命过程是这样 的:onCreate->onStart->onPause->onStop->onDestroy.例如:运行一个 Activity,进行了一些简单操作(不涉及页面的跳转等),然后按返回键结束. 情形二.有两个Activity(a和b),一开始显示a,然后由a启动b,然后在由b回到a,这时候a的生命过程应该是怎么样的呢(a被b完全遮盖)? a经历的过程为 onCreate->onStart-

8.1.1 Service的生命周期

2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Android服务,本章主要介绍了Android系统 中的服务(Service)技术.Service是Android中4个应用程序组件之一.在Android系统内部提供了很多的系统服务,通过这些系统 服务,可以实现更为复杂的功能,例如,监听来电.重力感应等.本节为大家介绍Service的生命周期. AD: 8.1.1  Service的生命周期 本节的例子代码所在的工

Service的生命周期与Activity生命周期区别

组件的生命周期 应用程序组件都有一个生命周期,从响应Intent的Android实例开始到这个实例被销毁.在这期间,他们或许有效或许无效,有效时或许对用户可见或许不可见.下面我们就来讨论四个基本组件的生命周期,包括在生命周期内的各种状态,以及状态之间的转换.这几种状态可能的结果是:进程让他们停止, 然后实例被销毁.  一.activity生命周期     一个activity有三个基本的状态:  @ 当activity在前台运行时(在activity当前任务的堆栈顶),为活动或者运行状态.这时a

Android 四大组件之Service 的生命周期和使用

Service简介: Service 是Android的四大组件之一,一般用于没有UI界面,长期执行的后台任务,即使程序退出时,后台任务还在执行.比如:音乐播放. Service的误区: 1.service在UI线程中执行. 2.不可以在service中执行耗时任务,因为service是在UI线程中运行的. 3.如果需要执行后台的耗时任务,必须在Service中开启一个线程来执行. Service的生命周期: 启动和停止Service的两种方式 1.context.startService():

Android Service的生命周期1

Managing the Lifecycle of a Service service的生命周期,从它被创建开始,到它被销毁为止,可以有两条不同的路径: A started service 被开启的service通过其他组件调用 startService()被创建. 这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它. 当service被停止时,系统会销毁它. A bound service 被绑定的service是当其他

service的生命周期以及两种service的差异

图片来源网络 可以看到,两种service的生命周期都相对简单,有一点不同的是,Intentservice每次调用的时候都执行onstartcommand,而boundservice一旦启动了之后,就不会每次执行onbind 在启动服务的activity消亡时,Intentservice不会消失,而boundservice的所有绑定者都消亡的时候,会消失 Intentservice一般不于启动者互动,而boundservice可以实现信息传递