- 浏览: 1591542 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (289)
- java 语法基础 (51)
- spring (8)
- mvc struct /Ant --build.xml (8)
- SOA (0)
- oracle 9i/10g (23)
- sql server 2000-2005 (3)
- 数据库基础知识 (6)
- 设计模式与软件架构 (10)
- Hibernate 持久化 (9)
- J2SE/J2EE/J2ME/AJAX 技术 (8)
- JSF 技术 (3)
- JAVA 图形化 (0)
- JMS (40)
- Eclipse 3.2 IDE 开发技巧 (13)
- 项目处理方法集合 (2)
- html/jsp/javascript (2)
- Unix/Linux (9)
- j2me/ARM/windriver/嵌入式 (4)
- 电信科学 (8)
- jsp (1)
- c/c++ (1)
- LZW压缩算法(java) (2)
- Android (77)
- 版本管理git/svn (2)
最新评论
-
huihai:
有demo吗?
NamingStrategy实现动态表名映射 -
cangbaotu:
推荐给大家一些有用的爬虫源码:https://github.c ...
网络爬虫(源代码参考) -
tuspark:
除了.classpath文件以外,.project文件也应该了 ...
Eclipse .classpath文件浅谈 -
tuspark:
造成eclipse自动关闭的原因有很多,这里有很多介绍:ecl ...
eclipse 自动关闭 解决方案 -
DEMONU:
网上都是这些,这种文章。。。
ActiveMQ中的消息持久性
1. Service 生命周期
1) 可以通过调用 Context.startService() 启动一个 Service ,这可能会触发 Service 的 onCreate() 和 onStart() 操作,具体来说即执行 startService() 一定会触发 onStart() ,但如果该 Service 已经在系统中存在,则 onCreate() 不会被再次调用,它只在 Service 第一次启动时触发。
通过 Context.startService() 启动的 Service 会一直运行,直到通过 Context.stopService() 或者 stopSelf() 停止它。多次通过 startService() 启动某个服务并不会生成多个实例,但会导致服务的 onStart() 被多次调用,当然由于只有一个实例,因此无论启动多少次,停止它只需调用一次 Context.stopService() 或 stopSelf() 就可以了。
2) 也可以通过 Context.bindService() 来获得一个服务的链接,这个链接是一直会保持到通过 Context.unbindService() 断掉它。如果在连接时系统中还没有该服务,则可能会新创建一个服务,这时 Service 的 onCreate 函数也同样会被调用。连接建立时会 Service 的 onBinder 会被触发,通过 onBinder 可以返回连接建立后的 IBinder 接口对象,使用服务的客户端(比如某个 Activity )可以通过 IBinder 对象和 Service 交互。
一个 Service 如果是通过 bindService() 启动的,那么它会一直存在到没有任何客户端与它保持连接为止,原因是可能有很多客户端与这个服务保持连接,这时如果某个链接被客户端主动断掉只会是 Service 的链接数减 1 ,当减至 0 的时候这个 Service 就会被销毁。
3) 一个 Service 既可以被启动 (start) 也可以被连接 (bind) ,这时 Service 的生命周期取决于它被创建的方式,如果是通过 Context.startService() 创建的则和第一种情况一样,如果是通过 Context.bindService() 使用参数 Context.BIND_AUTO_CREATE 创建的,则情况和第二种一样。
当然,在 Service 停止,被销毁时,会触发其 onDestroy() 函数,我们需要在这里完成这个 Service 相关资源的清理,比如停止其子线程,注销监听器等等。
2. 相关的官方描述 (Android SDK1.5) 如下:
android-sdk 文档 /docs/reference/android/app/Service.html
1) There are two reasons that a service can be run by the system. If someone calls Context.startService() then the system will retrieve the service (creating it and calling its onCreate() method if needed) and then call its onStart(Intent, int) method with the arguments supplied by the client. The service will at this point continue running until Context.stopService() or stopSelf() is called. Note that multiple calls to Context.startService() do not nest (though they do result in multiple corresponding calls to onStart()), so no matter how many times it is started a service will be stopped once Context.stopService() or stopSelf() is called.
2) Clients can also use Context.bindService() to obtain a persistent connection to a service. This likewise creates the service if it is not already running (calling onCreate() while doing so), but does not call onStart(). The client will receive the IBinder object that the service returns from its onBind(Intent) method, allowing the client to then make calls back to the service. The service will remain running as long as the connection is established (whether or not the client retains a reference on the service's IBinder). Usually the IBinder returned is for a complex interface that has been written in aidl .
3) A service can be both started and have connections bound to it. In such a case, the system will keep the service running as long as either it is started or there are one or more connections to it with the Context.BIND_AUTO_CREATE flag. Once neither of these situations hold, the service's onDestroy() method is called and the service is effectively terminated. All cleanup (stopping threads, unregistering receivers) should be complete upon returning from onDestroy().
如下是 Service 的生命周期时序图:
3. 几个需要注意的地方
1) Service 无论以何种方式创建,都是在应用的主线程里创建的,也就是说创建一个 Service 并不意味着生成了一个新的线程, Service 的创建过程是阻塞式的,因此也需要考虑性能,不能影响界面和逻辑上的后续操作。
2) 如果 Service 自己没有生成新的线程,那它也是运行在应用的主线程里的,因此 Service 本身并不能提高应用的响应速度和其他的性能,而是说通过这个后台服务生成新的线程来处理比较耗时的操作如大数据的读取等来提高响应, Service 自己并不能保证这一点。 Service 相当于提供了一个这些费时操作的平台,由它在后台创建新线程完成这些任务,以及视各种情况管理这些线程,包括销毁。
3) stopService 和 unbindService 都可以把 Service 停掉,但是如果希望明确立刻停掉 Service ,则使用 stopService 更安全,因为 unbindService 实质上是将与 Service 的连接数减一,当减为 0 的时候才会销毁该服务实例, stopService 的效果相当于将连接数立即减为 0 ,从而关闭该服务,所以在选择关闭方式上要视不同情况而定。
发表评论
-
APN(default、mms、supl、dun、hipri接入点类型的区别)
2013-10-10 19:31 45874设置APN上网时,大家可能经常遇到这个问题:为什么有时要填写 ... -
AMR音频编码器概述及文件格式分析
2013-10-10 19:29 3958全称Adaptive Multi-Rate,自适应多速率编码 ... -
pad 强制加载 Hdpi资源 (2.3 dpi < 240)
2012-07-16 16:47 0pad 强制加载 Hdpi资源 (2.3 dpi < ... -
android 设计模式-享元模式
2011-12-16 23:01 2195享元(FlyWeight)模式,原意是“轻量级”模式,它用来解 ... -
statusbar 2.3
2011-11-08 16:04 1285以前我的文章分析过Stat ... -
android 输入法默认设置
2011-07-07 14:00 7198设置默认输入法 在 frameworks\base\co ... -
Android Media Scanner Process
2011-06-06 22:58 3410下面是系统图 Medi ... -
handler与多线程消息处理
2011-06-04 13:42 8284在Android下面也有多线程的概念,在C/C++中,子线程可 ... -
android light
2011-03-24 16:15 3415背光设置是在:设置->声音和显示->亮度,通过进度 ... -
PowerManagerService sensor
2011-03-22 20:06 2673默认分类 2010-12-24 14:34:55 阅读144 ... -
android 单例
2011-02-15 09:26 42301. Framework层的代码: A ... -
Android 开发之 Services 服务
2010-11-02 18:21 4244Service Service ... -
深入学习android之AlarmManager
2010-11-01 16:50 34768对应AlarmManage有一个Alarm ... -
eclipse+android+ddms+adt
2010-09-14 10:30 8460用eclipse + ADT作为android ... -
Menus
2010-09-05 19:01 1791Android Menus 文章分类:移动开发 1.O ... -
Android开机自启动应用开发
2010-08-28 10:07 4594目前需要开发一个开机自启动的GTD应用程序来提醒用户的 ... -
Android2.1_Launcher学习笔记
2010-08-11 13:40 3879文章分类:移动开发 好么,2.0的源码没看几天,2.1的 ... -
Browsing Android Source in Eclipse
2010-08-09 16:00 3439Google’s Android SDK includes ... -
android 编译
2010-08-07 16:31 25351 我的系统是Ubuntu 8.04 * 2 系统上 ... -
Ubuntu linux 右键添加"以管理员身份打开","在终端中打开"
2010-08-02 15:04 4662Ubuntu linux 右键添加"以管理员身份打开 ...
相关推荐
在Spring框架中,Service层是业务逻辑的核心...以上就是关于Spring中Service生命周期的管理和配置,包括XML和注解方式的详细介绍。通过理解和熟练掌握这些知识,开发者能够更好地设计和维护Spring应用中的业务逻辑层。
本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...
`onDestroy()`则在Service被停止时调用,标志着Service生命周期的结束。值得注意的是,Service的生命周期管理需要谨慎处理,以避免内存泄漏和不必要的资源消耗。 Service与Activity之间的通信是通过Binder机制实现...
Service生命周期的理解和正确管理对于优化应用程序性能至关重要。以下是一个关于Service生命周期的详细解析,结合代码示例来阐述如何在Android中操作Service。 1. **Service生命周期概述** Service的生命周期主要...
本文档主要讲述的是 Android Service生命周期及用法;Android Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),...
- 未绑定Activity的Service生命周期图显示了startService()启动的过程,而绑定Activity的Service生命周期图则展示了bindService()启动的过程,两者在生命周期上有显著差异。 理解并熟练掌握Service的生命周期及其...
使用`startService()`方法启动Service,这会导致Service生命周期中的`onStartCommand()`被调用。若要停止Service,可以调用`stopService()`。需要注意的是,即使调用了`stopService()`,Service可能并不会立即停止,...
6. **Service生命周期**: Service的生命周期包括`onCreate()`, `onStartCommand()`, `onBind()`, `onUnbind()`, `onDestroy()`等关键方法。在创建Service时,会调用`onCreate()`,接着如果是通过`startService()`...
总的来说,Android Service的生命周期管理是开发者必须掌握的关键技能,正确理解和使用Service生命周期能够确保应用的稳定性和效率,避免不必要的资源消耗。在开发过程中,我们还需要注意Service的权限管理,以及在...
总的来说,Android Service生命周期管理涉及到一系列的回调方法,通过这些方法,开发者能够精确控制服务的启动、运行和终止,同时确保服务在正确的时间释放资源。合理地使用服务能提高应用的效率和用户体验。在实际...
Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,那...Service生命周期 : Android
本篇文章将详细阐述如何在Android中演示Service的生命周期,并提供相关的代码清单。 首先,Service的生命周期主要由四个主要方法组成:`onCreate()`, `onStartCommand()`, `onBind()`, 和 `onDestroy()`。当Service...
startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和activity绑定后,和activity共存亡,activity...
这是Service生命周期中的最后一个回调,开发者应在此处释放所有资源。 3. 启动服务(Started Service) 当通过startService()启动Service时,Service会在后台无限运行,直到调用stopService()或stopSelf()才会停止...
理解并掌握Service生命周期对于开发高效、稳定的Android应用至关重要。 1. **Service的启动和绑定** - **启动(Start)**: 当通过startService()方法启动Service时,Service会经历onCreate() -> onStartCommand() ...
本教程将深入探讨Service的生命周期及其启动方式,并结合一个求平均值的Demo进行讲解。 首先,我们来理解Service的生命周期。Service有四个主要状态:创建(Created)、启动(Started)、绑定(Bound)和销毁...
- **Service生命周期**: - `onCreate()`:Service首次创建时调用。 - `onStartCommand()`或`onBind()`:根据Service类型(启动型或绑定型),在Service启动时调用。 - `onDestroy()`:Service销毁前调用。 - **...