Service的生命周期和使用

来源:互联网 发布:汽车配件平台源码下载 编辑:程序博客网 时间:2024/06/07 12:16
在Android中Service是用来进行后台数据处理的东西,类似于Linux下的后台进程,就是当前活动创建的Service在这个活动窗口退出后Service还是继续运行的,我们要对用户的行动进行跟踪,就要长时间采集GPS发送过来的地理位置信息,这样的东西写成一个Service再合适不过了。自己编写的Service要继承系统的Service类,然后Override其中的方法。
服务可以分为本地服务和远程服务

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


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




一、采用start的方式开启服务
生命周期如下:
                                            onStart()过时了
开启服务: onCreate()--> onStartCommand() ---> onDestory();

如果服务已经开启,不会重复的执行onCreate(), 而是会调用onStart()和 onStartCommand();
只能手动的调用stopService();或者在手机里停掉服务
服务停止的时候调用 onDestory().
服务只会被停止一次

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


二、服务还有一种开启方式,绑定的方式开启服务。
onCreate() --->onBind();--->onServiceConnected()-->onunbind()-->onDestory();

绑定服务不会调用onstart或者onstartcommand方法;
如果服务已经绑定,不会重复的执行onBind(), 而是会调用onServiceConnected()
bind的方式开启服务,绑定断开,调用者挂了,服务也会跟着停掉。
开启者可以调用服务里面的方法。 


三、混合调用的服务的生命周期,bind+start
onCreate() --->onStartCommand()--->onBind()--->onServiceConnected()-->onunbind()-->onDestory(); 
服务既能长期后台运行,又能调用服务的方法。
绑定断开,调用者挂了,服务也不跟着挂掉 ,继续长期在后台运行,只能手动的调用stopService();或者在手机里停掉服务
调用者能调用服务里的方法

0 0