android bindservice方法,android BindService[通俗易懂]

android bindservice方法,android BindService[通俗易懂]1、绑定服务1.1绑定方式通过服务链接(ServiceConnection)或直接获取Service中状态和数据信息服务链接能够获取Service的对象,因此绑定Service的组件可以调用Service中的实现的函数使用Service的组件通过Context.bindService()建立服务链接,通过Context.unbindService()停止服务链接如果在绑定过程中Service没有启…

大家好,又见面了,我是你们的朋友全栈君。

1、绑定服务

1.1绑定方式

通过服务链接(ServiceConnection)或直接获取Service中状态和数据信息

服务链接能够获取Service的对象,因此绑定Service的组件可以调用

Service中的实现的函数

使用Service的组件通过Context.bindService()建立服务链接,通过

Context.unbindService()停止服务链接

如果在绑定过程中Service没有启动,Context.bindService()会自

动启动Service

同一个Service可以绑定多个服务链接,这样可以同时为多个不同的

组件提供服务

1.2如何绑定service?

step1.新建一个类MyService,继承Service

step2.在Manifest.xml文件中声明

step3.绑定

AAffA0nNPuCLAAAAAElFTkSuQmCCIntent intent = new Intent(context,MyService.class);

ServiceConnection conn = new ServiceConnection(){        public void onServiceDisconnected(ComponentName name) {

Log.i(“Service”, “onServiceDisconnected===”);

}        public void onServiceConnected(ComponentName name, IBinder service) {

Log.i(“Service”, “onServiceConnected===”);

}

}

context.bindService(intent,conn,Context.BIND_AUTO_CREATE);

AAffA0nNPuCLAAAAAElFTkSuQmCC

调用者通过bindService()函数绑定服务

并在第1个参数中将Intent传递给bindService()函数,声明需要启动的Service

第3个参数Context.BIND_AUTO_CREATE表明只要绑定存在,就自动建立

Service;同时也告知Android系统,这个Service的重要程度与调用者相同,

除非考虑终止调用者,否则不要关闭这个Service

解除绑定context.unBindService(conn);

说明:

1.    unbindService(conn)//不可以多次调用

2.关于ServiceConnection的两个方法:

当连接上service时,会调用onServiceConnected方法

当连接上后,service被后台停止,那么此时会调用onServiceDisconnected方法

1.3绑定Service的生命周期

绑定:如果service没被创建,那么调用一次onCreate(),然后调用onBind(),

多次绑定时,不会多次调用onBind()

解除绑定:调用onUnbind(),然后onDestory().不可以多次调用unbindService()方法解除绑定。

1.4启动方式和绑定方式的结合

这两种使用方法并不是完全独立的,在某些情况下可以混合使用

以MP3播放器为例,在后台的工作的Service通过Context.startSer

vice()启动某个特定音乐播放,但在播放过程中如果用户需要暂停

音乐播放,则需要通过Context.bindService()获取服务链接和Serv

ice对象,进而通过调用Service的对象中的函数,暂停音乐播放过

程,并保存相关信息。在这种情况下,如果调用Context.stopServ

ice()并不能够停止Service,需要在所有的服务链接关闭后,Serv

ice才能够真正的停止

生命周期:

第一次点击:不管是startService还是bindService,如果service还未存在,那么会调用

onCreate,之后如果是startService那么调用onStartCommand(),如果是

bindService那么会调用onBind()

之后,如果再调startService(),那么会调用onStartCommand();如果再调用

bindService那么如果第一次点击是bindService,那么就不会调用onBind(),否则

什么方法都不会被调用。

当bindService后,不能stopService,需要通过unBindService()来解除绑定。

只是startService()后,不可以通过unBindService()来销毁service

service和Activity处于同一个线程。

1.5服务绑定

通过bindService()函数绑定Servcie时, onCreate()函数和onBinde()函

数将先后被调用

通过unbindService()函数取消绑定Servcie时,onUnbind()函数将被调用,

如果onUnbind()函数的返回true,则表示在调用者绑定新服务时,

onRebind()函数将被调用

取消绑定仅需要使用unbindService()方法,并将ServiceConnnection

传递给unbindService()方法

需注意的是,unbindService()方法成功后,系统并不会调用

onServiceDisconnected(),因为onServiceDisconnected()仅在意外断开

绑定时才被调用

1.6Service的原理和用途

startService()的目的是回调onStart()方法,onCreate() 方法是在Service

不存在的时候调用的,如果Service存在(例如之前调用了bindService,那

么Service的onCreate方法已经调用了)那么startService()将跳过onCreate

() 方法。

bindService()目的是回调onBind()方法,它的作用是在Service和调用者之

间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器

的操作),一般使用bindService来绑定到一个现有的Service(即通过

StartService启动的服务)。

转自:http://www.cnblogs.com/feike/archive/2013/01/03/2843023.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132663.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月1日 上午6:40
下一篇 2022年5月1日 上午7:00


相关推荐

  • 面向对象程序设计的基本概念_java面向对象程序设计

    面向对象程序设计的基本概念_java面向对象程序设计Java程序设计(面向对象)- 基本概念

    2022年4月22日
    56
  • python中numpy库的作用_python random库

    python中numpy库的作用_python random库一、什么是NumPyNumpy–NumericalPython,是一个基于Python的可以存储和处理大型矩阵的库。几乎是Python生态系统的数值计算的基石,例如Scipy,Pandas,Scikit-learn,Keras等都基于Numpy。使用Numpy,可以进行:1.数组和逻辑运算2.傅里叶变换和图形操作实例3.线性代数相关的运算操作功能很强大有木有???但是Python官网上的…

    2022年8月28日
    4
  • 分布式爬虫 原理

    分布式爬虫 原理分布式爬虫则是将多台主机组合起来 共同完成一个爬取任务 这将大大提高爬取的效率 一 分布式爬虫架构在了解分布式爬虫架构之前 首先回顾一下 Scrapy 的架构 如下图所示 Scrapy 单机爬虫中有一个本地爬取队列 Queue 这个队列是利用 deque 模块实现的 如果新的 Request 生成就会放到队列里面 随后 Request 被 Scheduler 调度 之后 Request 交给 Download

    2026年3月18日
    2
  • 【Python数据科学】第三章 Pandas 数据处理(下半章)

    【Python数据科学】第三章 Pandas 数据处理(下半章)7 合并数据集 合并与连接 Pandas 的基本特性之一就是高性能的内存式数据连接 join 和合并 merge 操作 如果你有使用数据库的经验 那么对这类操作一定很熟悉 Pandas 的主接口是 pd merge 函数 下面让我们通过一些示例来介绍它的用法 7 1 关系代数 pd merge 实现的功能基于关系代数 relationalal 的一部分 关系代数是处理关系型数据的通用理论 绝大多数数据库的可用操作都以此为理论基础 关系代数方法论的强大之处在于 它提出的若干简单操作规则经过组合就可

    2026年3月20日
    4
  • python venv文件夹_pycharm的venv文件夹的自定义处理「建议收藏」

    python venv文件夹_pycharm的venv文件夹的自定义处理「建议收藏」pycharm每次新建项目都需要重新安装库,解决方法如下:新建项目时自定义选择库(自己安装python位置),不要创建新的(如下图)第一完成后,让它记忆我们这个库,新建项目都默认这个库依次打开:Flie-Settings-Project-projectinterpreter点击2号位置的设置图样,会出现如下图,再点击Add选择现有环境(python安装位置)添加第三方库默认地址是http…

    2022年8月28日
    5
  • 上海电信光猫SA1456C桥接后4K IPTV继续使用[通俗易懂]

    上海电信光猫SA1456C桥接后4K IPTV继续使用[通俗易懂]上海电信光猫SA1456C路由器TL-R488GPM-AC背景:打电话给上海电信客服被告知,改桥接不能看4KIPTV,电信安装师傅也是同一口径。网上也是很多类似观点,解决方案是用软路由方式去改造。这种方案需要软路由,万一不稳定,会影响家庭安定团结的局面。需求:1、光猫直接接IPTV看,有两条IPTV接路由器即可,不需要更改任何东西。2、光猫桥接路由器,路由器宽带拨号,保证贤妻上网和IPTV的基本需求,再接旁路由满足自己小玩法。当然如有移动或联通送的宽带更好。核心:稳定简单,不折腾。如何光

    2022年10月8日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号