Android:Service开启之startService与bindService混合使用

为什么需要混合使用

根据上篇提到了Service的各种生命周期,我们知道startService开启后与调用者毫无关联,不会随着调用者的销毁而销毁。bindService可以与调用者绑定实现一些交互,但是与调用者共生死。
所以需要两者结合使用发挥各自的有点,即又能提供与调用者的交互,又不会与调用者一起销毁的服务

不同开启方式的生命周期
startService & stopService

onCreate – onStartCommand – onDestroy
不会随着调用者销毁

bindService & unbindService

onCreate – onBind – onUnbind – onDestroy
会随着调用者销毁

startService bindService & unbindServiced stopService

onCreate – onStartCommand – onBind – onUnbind–onDestroy
开始按钮点击事件运行startService,bindService开启服务,
结束按钮点击事件运行unbindServiced,stopService结束服务

在这里插入图片描述

startService bindSErvice & 销毁调用者

onCreate – onStartCommand – onBind – onUnbind(调用者销毁时)-- onDestroy(后台持续运行,直到被系统回收或者用户强制销毁服务)
在这里插入图片描述
服务开始
在这里插入图片描述
调用者销毁后,服务解绑,未销毁。

bindService startService & unbindService stopService

onCreate – onBind – onStartCommand – onUnbind – onDestroy
在这里插入图片描述
bindService先运行,onBind将先与onStartCommand执行
在这里插入图片描述
点击结束按钮执行unbindService,stopService,正常销毁服务。

bindService startService & 销毁调用者

onCreate – onBind – onStartCommand – onUnbind (销毁调用者时)-- onDestroy(后台持续运行,直到被系统回收或者用户强制销毁服务)
在这里插入图片描述
服务开始的生命周期同上
在这里插入图片描述
结束的生命周期与上不同的是onDestroy是在调用者销毁之后由于其他原因销毁。

以上bindService与startService同时执行创建的是同一个Service实例,因为onCreate只执行了一次。

代码基本采用上一篇Service生命周期与开启方式
布局上添加了一个button用于销毁当前Activity,可以模拟调用者的销毁,主要修改如下

		stopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                unbindService(myConnection);
                stopService(serviceOne);
            }
        });
        startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                bindService(serviceOne,myConnection,BIND_AUTO_CREATE);
                startService(serviceOne);
            }
        });

END

用bindService+startService的方式可以同时享受两者的优点,可以持久后台运行并且可以通过调用者操作Service。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值