Android Activity与Service数据交互:Binder、bindService(系列2)
来源:互联网 发布:淘宝靠什么盈利模式 编辑:程序博客网 时间:2024/04/30 10:21
转载请注明出处:http://blog.csdn.net/zhangphil
Android Activity与Service数据交互:Binder、bindService(系列2)
在实际的开发中,往往通过Android的Service把后台任务完成后,需要将结果传递给上层代码,比如一个Activity启动了Service,当Service在后台完成处理操作后,此时Service需要将结果传递给Activity,该怎么办呢?办法很多,其中一个就是使用和Android Service密切相关的Android Binder。
假设一个场景,前台Activity需要做一个计算任务,计算任务很简单,计算两个数值的和a+b=?(在实际开发中,这是不存在的,举这个a+b的场景只是为了举一反三用简单例子说没问题)。我将这个计算过程放到Service里面做,首先需要给Service传递过去a与b的值,然后启动Service的服务计算a+b,接下来Service计算完毕得到结果后,Activity再从Service里面获得计算结果,整个Activity与Service交互至此结束。
但是这个看似简单却在Activity与Service中如果不用bind的模型传递数据将会变得复杂,原因在于当Activity启动Service后,从此Activity与Service天地相隔,不存在太大关系,不能像普通的类一样操作Service及里面的方法体。
下面就用Service的bind解决。
这篇文章是在上一篇文章《Android Service简介(系列1)》(文章链接:http://blog.csdn.net/zhangphil/article/details/49373939 )的基础上增加bind机制。
大致上Activity与Service通过bind交互的编程模型是:
(第1步)老规矩,还是先继承Service。完成里面的onBind,返回一个自己重写的Binder,在本例中是MyBinder。MyBinder里面一个public get方法返回Service的类实例。
毫无疑问,同时需要在Service里面写好public set/get方法,为后面的Activity访问做好基本set/get操作。
(第2步)在Activity里面bindService。bindService是为了将Activity和Service绑定在一起,大有不求同年同月生,但求同年同月死的味道。
在bindService的时候,需要传递一个ServiceConnection,ServiceConnection像一个桥梁,建立了Activity和Service之间的桥接。事实上也就是为了从ServiceConnection的回调方法onServiceConnected中的获得后台的Service句柄。只要获得Service的句柄,那么什么都好办了。
(第3步)在Activity中拿到Service的句柄后,就可以像操作一个普通的Java类一样传参、取值了。
以上步骤完成后,需要明确一个基本的Activity使用Service的顺序流程,以计算a+b=?为例:
(A)首先需要在Activity里面bindService。bindService时候需要传递过去ServiceConnection,在ServiceConnection的回调方法onServiceConnected中获得Service句柄。
(B)拿到Service句柄后,在Activity中设置Service里面的a与b的值。
(C)startService。startService将跳过onCreate直接进入onStartCommand方法体内,在Service里面的后台操作,也可以简单理解为就是在Service的onStartCommand中的操作。在onStartCommand中计算a+b的和。
(D)上层Activity再次通过之前获得的Service句柄从Service里面get a+b的和。
以上模型和流程的代码实现:
Service类:
测试的Activity MainActivity:
- Android Activity与Service数据交互:Binder、bindService(系列2)
- Android Activity与Service数据交互:Binder、bindService(系列2)
- Activity与Service数据交互:Binder,bindService(系列2)
- Android — Activity与Service交互之Binder总结
- android开发--activity与service交互之binder
- android 使用binder实现Service与activity进行交互
- 通过bindService方法实现Activity与Service的交互
- Android Service与Activity交互
- Android Activity与Service交互,startservice,bindService多媒体播放器音乐播放暂停按钮请求服务设置按钮图片问题
- android bindservice以及activity和service传递数据
- Android中Service与Activity数据交互的简单理解
- android Service(二) activity启动Service方式二:bindService()
- Android开发之Service与Activity数据交互(源代码分享)
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
- 在Android中实现Service动态更新UI界面(Service与主程序Activity之间的数据交互或控制)
- android service的使用(三)- 与activity的交互
- Android Activity与local service的交互
- android service与Activity的交互方式
- error C4996: '_itoa': This function or variable may be unsafe. Consider using _itoa_s instead. To di
- Charles 从入门到精通
- 【leetcode】137. Single Number II
- 【转】R-CNN学习笔记3:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
- Linux目录结构
- Android Activity与Service数据交互:Binder、bindService(系列2)
- CentOS 6.8_x64 Linux下基础环境搭建
- C++高级编程资料汇总(参考手册+电子书+编程思想+算法分析)
- 判定覆盖与条件覆盖的区别
- 5个以下参数的函数this调用函数
- wamp下修改mysql root用户的登录密码
- Sublime text使用方式
- Android-PullToRefresh
- Mybatis中Mapper出错