8.1.2 绑定Activity和Service

8.1.2 绑定Activity和Service

2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T

《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方法的定义如下:

  1. public boolean bindService(Intent service, 
    ServiceConnection conn, int flags)

该方法的第1个参数表示与服务类相关联的Intent对象,第2个参数是一个ServiceConnection类型的变量,负责连接Intent 对象指定的服务。通过ServiceConnection对象可以获得连接成功或失败的状态,并可以获得连接后的服务对象。第3个参数是一个标志位,一般 设为Context.BIND_AUTO_CREATE。

下面重新编写8.1.1节的MyService类,在该类中增加了几个与绑定相关的事件方法。

  1. package net.blogjava.mobile.service;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.os.Binder;
  5. import android.os.IBinder;
  6. import android.util.Log;
  7. public class MyService extends Service
  8. {
  9. private MyBinder myBinder = new MyBinder();
  10. //  成功绑定后调用该方法
  11. @Override
  12. public IBinder onBind(Intent intent)
  13. {
  14. Log.d("MyService", "onBind");
  15. return myBinder;
  16. }
  17. //  重新绑定时调用该方法
  18. @Override
  19. public void onRebind(Intent intent)
  20. {
  21. Log.d("MyService", "onRebind");
  22. super.onRebind(intent);
  23. }
  24. //  解除绑定时调用该方法
  25. @Override
  26. public boolean onUnbind(Intent intent)
  27. {
  28. Log.d("MyService", "onUnbind");
  29. return super.onUnbind(intent);
  30. }
  31. @Override
  32. public void onCreate()
  33. {
  34. Log.d("MyService", "onCreate");
  35. super.onCreate();
  36. }
  37. @Override
  38. public void onDestroy()
  39. {
  40. Log.d("MyService", "onDestroy");
  41. super.onDestroy();
  42. }
  43. @Override
  44. public void onStart(Intent intent, int startId)
  45. {
  46. Log.d("MyService", "onStart");
  47. super.onStart(intent, startId);
  48. }
  49. public class MyBinder extends Binder
  50. {
  51. MyService getService()
  52. {
  53. return MyService.this;
  54. }
  55. }
  56. }

现在定义一个MyService变量和一个ServiceConnection变量,代码如下:

  1. private MyService myService;
  2. private ServiceConnection serviceConnection = new ServiceConnection()
  3. {
  4. //  连接服务失败后,该方法被调用
  5. @Override
  6. public void onServiceDisconnected(ComponentName name)
  7. {
  8. myService = null;
  9. Toast.makeText(Main.this, "Service 
    Failed.", Toast.LENGTH_LONG).show();
  10. }
  11. //  成功连接服务后,该方法被调用。在该方法中可以获得MyService对象
  12. @Override
  13. public void onServiceConnected(ComponentName name, IBinder service)
  14. {
  15. //  获得MyService对象
  16. myService = ((MyService.MyBinder) service).getService();
  17. Toast.makeText(Main.this, "Service 
    Connected.", Toast.LENGTH_LONG).show();
  18. }
  19. };

最后使用bindService方法来绑定Activity和Service,代码如下:

  1. bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);

如果想解除绑定,可以使用下面的代码:

  1. 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

时间: 2024-08-04 14:14:37

8.1.2 绑定Activity和Service的相关文章

Activity和Service绑定

Activity和Service绑定后,可以方便Activity随时调用对应的Service里面的方法 绑定代码如下 Activity类代码: [java] view plaincopy <span style="font-size:16px;">package com.fox.Activity; import com.fox.Activity.service.Service1; import android.app.Activity; import android.con

activity 与 service 之间的通信

activity和service通信:通过binder 举个我实际项目中的例子:在service中下载更新应用 首先是下载更新apk的service: public class UpdateVersionService extends Service { private final String tag = "young"; private Context context = this; private BaseApplication application; private Down

Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信

Service的基本概念 为什么要有Service Service的基本用法 电话窃听器的小案例 Service和Activity通信 Service和Thread的关系 向光明而行! Service的基本概念 Service是Android的四大组件之一,在每一个应用程序中都扮演者非常重要的角色. 它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候,我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态. 既然都是被用于处理耗时的操作,那么我们什么

Activity和Service的生命周期(图)

1.Activity的生命周期 情形一.一个单独的Activity的正常的生命过程是这样 的:onCreate->onStart->onPause->onStop->onDestroy.例如:运行一个 Activity,进行了一些简单操作(不涉及页面的跳转等),然后按返回键结束. 情形二.有两个Activity(a和b),一开始显示a,然后由a启动b,然后在由b回到a,这时候a的生命过程应该是怎么样的呢(a被b完全遮盖)? a经历的过程为 onCreate->onStart-

使用Messenger进行Activity与Service之间的相互通信

在Android开发中,有时候我们需要让一个Activity绑定一个Service,进行两者之间的通信.当Activity绑定成功以后,就可以调用Service中的public(或有对应可见级别)的方法.如果Service想把一些信息反馈给Activity,则需要将Activity的Listener传递给Service,由Service负责调用. 这样的做法是可以实现功能的,但有一些缺憾. 首先,Service需要把被调用的方法做成public的,不利于隐藏实现. 第二,调用显得凌乱,在Acti

Android之Activity与Service通信

一.当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现. 当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用.比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信. 代码如下: /*************************Service代码****************************************/ p

Activity和Service相互通信

在做音乐播放器的时候,要在Activity不绑定Service的前提下(如果绑定了,Activity挂了Service也就挂了)进行相互传输数据,Activity向Service传输数据可以使用Intent,Service向Activity传输数据可以使用广播机制,一般代码如下: 标签: Android SDK [1].[代码] [Java]代码 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Android Demo之旅 Activity、Service、BroadCast实现计数统计

时间匆匆,转眼就是大半个月过去了,学习android的道理上艰苦而漫长呀!!自己写了很多的小demo,总结总结,也在博客里面留点足迹吧! 源代码下载:http://download.csdn.net/detail/harderxin/7761401     参考实例:老罗博客 实现功能:统计计数,我们可能有很多种方式来实现它,但是这个实例运用了Activity.Service.BroadcastReceiver在android中三个大知识点,所以觉得它比较有参考价值: 可学知识点:1)Activ

Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)

转载于:http://blog.csdn.net/byxdaz/article/details/9708491 http://blog.csdn.net/q876266464/article/details/19641251 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,Broadcast Receiver广播接收器. 一.了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以