8.1.2 绑定Activity和Service
8.1.2 绑定Activity和Service
《Android/OPhone开发完全讲义》第8章Android服务,本章主要介绍了Android系统 中的服务(Service)技术。Service是Android中4个应用程序组件之一。在Android系统内部提供了很多的系统服务,通过这些系统 服务,可以实现更为复杂的功能,例如,监听来电、重力感应等。本节为大家介绍绑定Activity和Service。
AD:
8.1.2 绑定Activity和Service
本节的例子代码所在的工程目录是src\ch08\ch08_serviceactivity
如果使用8.1.1节介绍的方法启动服务,并且未调用stopService来停止服务,这个服务就会随着Android系统的启动而启动,随着 Android系统的关闭而关闭。也就是服务会在Android系统启动后一直在后台运行,直到Android系统关闭后服务才停止。但有时我们希望在启 动服务的Activity关闭后服务自动关闭,这就需要将Activity和Service绑定。
通过bindService方法可以将Activity和Service绑定。bindService方法的定义如下:
- public boolean bindService(Intent service,
ServiceConnection conn, int flags)
该方法的第1个参数表示与服务类相关联的Intent对象,第2个参数是一个ServiceConnection类型的变量,负责连接Intent 对象指定的服务。通过ServiceConnection对象可以获得连接成功或失败的状态,并可以获得连接后的服务对象。第3个参数是一个标志位,一般 设为Context.BIND_AUTO_CREATE。
下面重新编写8.1.1节的MyService类,在该类中增加了几个与绑定相关的事件方法。
- package net.blogjava.mobile.service;
- import android.app.Service;
- import android.content.Intent;
- import android.os.Binder;
- import android.os.IBinder;
- import android.util.Log;
- public class MyService extends Service
- {
- private MyBinder myBinder = new MyBinder();
- // 成功绑定后调用该方法
- @Override
- public IBinder onBind(Intent intent)
- {
- Log.d("MyService", "onBind");
- return myBinder;
- }
- // 重新绑定时调用该方法
- @Override
- public void onRebind(Intent intent)
- {
- Log.d("MyService", "onRebind");
- super.onRebind(intent);
- }
- // 解除绑定时调用该方法
- @Override
- public boolean onUnbind(Intent intent)
- {
- Log.d("MyService", "onUnbind");
- return super.onUnbind(intent);
- }
- @Override
- public void onCreate()
- {
- Log.d("MyService", "onCreate");
- super.onCreate();
- }
- @Override
- public void onDestroy()
- {
- Log.d("MyService", "onDestroy");
- super.onDestroy();
- }
- @Override
- public void onStart(Intent intent, int startId)
- {
- Log.d("MyService", "onStart");
- super.onStart(intent, startId);
- }
- public class MyBinder extends Binder
- {
- MyService getService()
- {
- return MyService.this;
- }
- }
- }
现在定义一个MyService变量和一个ServiceConnection变量,代码如下:
- private MyService myService;
- private ServiceConnection serviceConnection = new ServiceConnection()
- {
- // 连接服务失败后,该方法被调用
- @Override
- public void onServiceDisconnected(ComponentName name)
- {
- myService = null;
- Toast.makeText(Main.this, "Service
Failed.", Toast.LENGTH_LONG).show(); - }
- // 成功连接服务后,该方法被调用。在该方法中可以获得MyService对象
- @Override
- public void onServiceConnected(ComponentName name, IBinder service)
- {
- // 获得MyService对象
- myService = ((MyService.MyBinder) service).getService();
- Toast.makeText(Main.this, "Service
Connected.", Toast.LENGTH_LONG).show(); - }
- };
最后使用bindService方法来绑定Activity和Service,代码如下:
- bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
如果想解除绑定,可以使用下面的代码:
- unbindService(serviceConnection);
在MyService类中定义了一个MyBinder类,该类实际上是为了获得MyService的对象实例的。在 ServiceConnection接口的onServiceConnected方法中的第2个参数是一个IBinder类型的变量,将该参数转换成 MyService.MyBinder对象,并使用MyBinder类中的getService方法获得MyService对象。在获得 MyService对象后,就可以在Activity中随意操作MyService了。
运行本节的例子后,单击【Bind Service】按钮,如果绑定成功,会显示如图8.3所示的信息提示框。关闭应用程序后,会看到在LogCat视图中输出了onUnbind和 onDestroy信息,表明在关闭Activity后,服务先被解除绑定,最后被销毁。如果先启动(调用startService方法)一个服务,然后 再绑定(调用bindService方法)服务,会怎么样呢?在这种情况下,虽然服务仍然会成功绑定到Activity上,但在Activity关闭后, 服务虽然会被解除绑定,但并不会被销毁,也就是说,MyService类的onDestroy方法不会被调用。
图8.3 绑定服务 |
8.1.2 绑定Activity和Service的更多相关文章
- Activity和Service绑定
Activity和Service绑定后,可以方便Activity随时调用对应的Service里面的方法 绑定代码如下 Activity类代码: <span style="font-si ...
- Activity与Service进行数据交互
Android启动Service有两种方法,一种是startService,一种是bindService.生命周期如下: 执行startService时,调用者如果没有stopService,Serv ...
- Activity与Service通信(不同进程之间)
使用Messenger 上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger. 其实实现IPC(Inter-Process Communicat ...
- Android之Activity与Service通信
一.当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现. 当一个Activity绑定到一个Service上时,它负责维护Service实例的引用 ...
- Activity与Service通信的方式有三种:
在博客园看到的,看着挺不错的,借来分享下 继承Binder类 这个方式仅仅有当你的Acitivity和Service处于同一个Application和进程时,才干够用,比方你后台有一个播放背景音乐的S ...
- Android中Activity和Service的数据通讯
在Android中,我们通常需要Activity跟Service进行通讯,很多人只知道Activity掉用Service,却不知道Service如何将数据返回给Activity.其实Service返回 ...
- 在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!
在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是 ...
- Android四大组件应用系列——Activity与Service交互实现APK下载
Servic与Activity相比它没有界面,主要是在后台执行一些任务,Service有两种启动方法startService()和bindService(),startService方式Service ...
- 201709012工作日记--activity与service的通信机制
service生命周期 Service主要包含本地类和远程类. Service不是Thread,Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 ...
随机推荐
- Spring Cloud 常用依赖
<!-- 将微服务provider侧注册进eureka --> <dependency> <groupId>org.springframework.cloud< ...
- 详细的KVO总结,包括基本改变,使用案例,注意点.看我就够了!
概述 KVO全称Key-Value-Observing,也叫键值监听,是一种观察者设计模式.提供了一种机制,当指定的对象的属性被修改后,对象就会收到一个通知.也就是说每次指定的被观察的对象的属性被修改 ...
- luogu P1215 [USACO1.4]母亲的牛奶 Mother's Milk
题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,农民把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...
- [Baltic2003] Gem
[Baltic2003]Gem Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 501 Solved: 320[Submit][Status][Discu ...
- [CF819B]Mister B and PR Shifts
题意:定义一个排列$p_{1\cdots n}$的“偏移量”$D=\sum _{i=1}^n\left|p_i-i\right|$ 求它所有的轮换排列中偏移量最小的是多少,要求输出轮换序数 暴力就是求 ...
- 软件配置篇-MySQL下载及安装
1.进入MySQL官网下载 下载地址:https://dev.mysql.com/downloads/mysql/ 选择合适的版本下载. 2.安装MySQL 解压后文件夹一般名为:mysql-x.x. ...
- Java学习笔记(6)
java是面向对象的语言. 对象:真实存在的唯一的事物. 类:实际就是对某种类型事物的共性属性与行为的抽取 面向对象的计算机语言的核心思想:找适合的对象做适合的事情. 如何找适合的对象呢: 1.sun ...
- XAMPP 下apache部署网站,多个虚拟机(空间)配置
1.首先修改C盘WINDOWS/system32/drivers/etc目录下的 hosts 文件,用记事本打开,加入: 127.0.0.1 www.a.com 127.0.0.1 www.b.com ...
- javascript如何写一个for循环
一个非常简单的for循环,也有不少的学问.假如,我们的目标是要遍历一个dom结点的所有孩子结点,然后打印结点的内容. 在javascript下,我刚学习的时间,我会这样写. for(var i = 0 ...
- C#分析URL参数获取参数和值得对应列表(二)
不错博客: [C#HttpHelper]官方产品发布与源码下载---苏飞版http://www.sufeinet.com/thread-3-1-1.html http://blog.csdn.net/ ...