Android之service学习笔记

android service 详解(生命周期、使用方法)

一、生命周期

service不同的启动方式、生命周期不同。service在client(例如activity、fragment)中使用startService(Intent intent)和bindService()启动,使用startService()的启动方式生命周期如图左边所示,两种启动方式有一定的区别,但是不管以那种方式启动service,只要不是初次启动这个服务,都不会在调用onCreate()方法,onCreate方法只用在初次启动是会被调用,在service生存期间只会调用一次(详细的解读可以参考文章 [https://blog.csdn.net/cpcpcp123/article/details/121961812]。
service 的生命周期

生命周期之startService

startService()启动,启动时可以通过Intent对象将参传到service,但是启动后服务与client之间没有关系,client无法去控制service(在不使用广播、以及其他通信机制的情况下),但是client可以通过stopService()以及方法停止服务。

生命周期之bindService

bindService()的启动方式比较麻烦,但是bindservice的启动方式可以获取service对象,从而直接控制service的行为,从而达到你想要的效果。bindservic的启动后,一旦client销毁,service也会解绑。同时可以通过unbindservice()方法解绑。
bindService的使用方法如下:
1、在service中定义继承了binder一个内部类,在该内部类中返回当前的service对象,这个的作用是为了帮助client获取到当前的service对象。


 public class MyBinder extends Binder{
        public MyService getService(){
            return MyService.this;
        }
    }
    

在重写service的onBind()方法


@Override
 public IBinder onBind(Intent intent) {
  return mybinder;
 }
 

2、

在client(activity)中实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法。在绑定成功后onServiceConnected就会被回调,而且只会回调一次,也就是说你即使多次调用bindService,
onServiceConnected也只会执行一次,只有当unbindService后再次bindService,onServiceConnected才会又被调用一次 onService Disconnected这个只有在服务崩溃或被终止时才会被调用,unbindService是不会调用到onServiceDisconnected的onServiceConnected方法里的第二个参数就是我们在Service类里onBind方法返回的对象

 ServiceConnection conn=new ServiceConnection(){

  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
  //在activity绑定service是执行,主要是 通过这个方法获取onBind()中的返回值.
  //但是也可以进行简单的逻辑处理
  //向下转型,获取到service的引用。
  myService = ((MyService.MyBinder) service).getService();  
            System.out.println("Service连接成功");  
            // 执行Service内部自己的方法  
            myService.excute();  
  }

  @Override
  public void onServiceDisconnected(ComponentName name) {
  //绑定结束时会执行的操作
  }

在使用bindService(Intent Intent,ServiceConnection con, int flags))开始服务,执行bindService()需要是三个参数,一个是intent,一个是ServiceConnection,第三个是一个flag,一般使用BIND_AUTO_CREATE。

service的使用总结

需要在清单xml中对service进行注册。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值