Service生命周期调用

##01_start开启服务的生命周期(重点)

    1.开启服务时调用的生命周期的方法:onCreate,onStartCommand;
    2.停止服务时调用的生命周期的方法:onDestroy;
    没有onResume,onPause,onStop,onRestart方法,因为服务没有界面;

    
##02_bind方式开启服务的生命周期(重点)

特点:

    1.在第一次绑定服务时,先创建服务对象,调用的方法有onCreate,然后再绑定服务,调用的方法是onBind;
    2.服务只能被绑定一次,如果绑定多次,不会执行任何操作;
    3.解除绑定的服务时,先解除绑定,调用的方式是onUnbind,然后再销毁服务的实例对象,调用了onDestroy方法;
    4.服务只能被解除绑定一次,如果多次解除绑定会抛出异常;
    5.当界面关闭时,服务就会被解除绑定;
    
生命周期:

    1.绑定服务时:onCreate,onBind;
    2.解除绑定的服务时:onUnbind,onDestroy;

推荐使用的混合方式:

    1.startService():让服务长期运行在后台;
    2.bindService():为了调用服务中的业务逻辑方法;
    3.unbindService():解除绑定的服务,目的是不在调用服务中的业务逻辑方法;
    4.stopService():停止服务,销毁服务对象;
    
    
##03_为什么要引入bindservice的API

    目的是为调用服务中的业务逻辑方法;
    

    
##04_绑定服务调用服务方法的过程

    1.在服务中创建一个中间人的角色,在中间人里面写一个方法,在这个方法中调用服务的业务逻辑方法;
    2.activity绑定服务成功时,让服务给activity返回中间人对象;
    3.在activity中得到中间人对象,在调用中间人的方法,从而达到间接调用服务中业务逻辑方法的目的;
    
##05_绑定服务抽取接口(重点)

    接口的作用:对外暴露功能,隐藏实现的细节;

    1.在服务中写了3个业务逻辑方法:methodInService(),methodInEat(),methodInKtv();

    2.写一个接口,里面写2个方法:methodInMyBinder,eatInMyBinder;

    3.在服务中让MyBinder实现IService接口,并且实现接口中的两个方法,在这两个方法中分别调用服务中的业务方法;这样MyBinder一身兼两职,即是IBinder接口类型的对象,又是IService接口类型的对象;


##06_服务的应用场景

    应用场景:天气预报,股票软件,音乐播放器;

    应用场景:当用户提交数据失败时,应该把数据保存到本地的sqlite数据库中;写一个服务的程序,检测手机网络信号是否健康,当网络信号健康时,应该从数据库读取用户提交失败的数据,然后访问网络发送给服务器端;

##07_利用服务注册广播接收者

    操作频繁的广播接收者在清单文件中注册是无效的,如:锁频,解屏;

    在代码中注册广播接收者:

        // 代码中注册广播接收者
        // 1.创建广播接收者对象
        receiver = new ScreenBroadcastReceiver();
        // 2.创建IntentFilter对象
        IntentFilter filter = new IntentFilter();

        // 3.在filter中添加两个action
        filter.addAction("android.intent.action.SCREEN_ON");
        filter.addAction("android.intent.action.SCREEN_OFF");

        // 4.注册广播接收者
        registerReceiver(receiver, filter);

##08_远程服务aidl的写法(重点)

    调用远程服务中的方法;
    写两个过程:本地应用程序,远程服务(装在同一个手机上的另外一个软件,里面有一个service,service中有一个业务逻辑方法);
    在本地应用程序中调用远程服务中的方法;

    
    aidl: Android interface defination language 安卓接口定义语言;
    aidl文件是一个可以对外共享,可以拷贝到其他工程中使用;
    IPC: inter process communication 进程间的通讯;

    修改的步骤:

        1.修改了IService.java文件的扩展名IService.aidl;
    
        2.在IService.aidl文件中去掉了两个public;
    
        3.在RemoteService中让中间人继承了Stub;
    
        4.在本地应用的工程中创建一个与远程服务工程一样的包名(IService.aidl所在的包);
    
        5.把IService.aidl拷贝到本地应用的工程中,放在新建的包中;
    
        6.在本地应用工程得到远程服务返回的中间人对象;
            IService myBinder = Stub.asInterface(service);
    
        7.调用中间人对象的方法;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值