Services生命周期
来源:互联网 发布:dnf一打团就数据异常 编辑:程序博客网 时间:2024/05/29 17:34
Services作为Android四大核心主组之一,主要用于处理耗时操作,它长期运行在后台进程,没用对应的用户界面,其生命周期比Activity简单,先看下图
从上图可知,服务有两种启动方式及生命周期,举个例子说明它们的不同之处:音乐服务可以由startService()开启并长期运行在后台,而用户在播放器上的操作或想获取当前歌曲的信息时,可以选择一个Activity绑定服务,在这种情况下,调用stopSelf()或stopService()不能关闭服务,只能等待onUnbind()的出现
1). Service的创建方式:onCreate()
Android系统最先调用的方法,如果该服务已经处于running状态,onCreate()不会被调用,因为它只会被调用一次
2). onStartCommand()
由其它组件调用startService(),一旦执行这方法,该服务立刻运行在后台,如果实现onStartCommand(),你就必须在该服务的工作结束后调用stopSelf()或stopService()关闭它;如果你想提供绑定服务,就不必实现onStartCommand()
3). onBind()
绑定服务可以存在多个组件绑定一个Service,它由其它组件调用bindService()而得,如果你实现它,就必须提供一个用户与服务交互的IBinder接口,就算你不需要绑定,可以返回一个Null值
4). onUnBind()
绑定服务实际是临时使用服务,随着绑定组件的销毁而销毁,这里最主要说明下:当多个组件绑定一个Service时,只有所有组件调用完onUnbind()后才能真正的关闭服务
5). onDestroy()
它代表Service生命的完结,当不在需要这个服务时,可以调用它,同时会释放服务所占用的资源
接下来看看服务每个生命周期方法:
public class ExampleService extends Service { int mStartMode; //服务关闭后重新开启 IBinder mBinder; // 用户绑定的接口 boolean mAllowRebind; // 是否需要再次绑定 @Override public voidonCreate
() { // 创建服务 } @Override public intonStartCommand
(Intent intent, int flags, int startId) { // 用startService()开启服务
return mStartMode; } @Override public IBinderonBind
(Intent intent) { //用
bindService()绑定服务
return mBinder; } @Override public booleanonUnbind
(Intent intent) { // 用unbindService()解绑服务
return mAllowRebind; } @Override public voidonRebind
(Intent intent) { // 如果onUnbind()已经调用,可以用bindService()
再次绑定 } @Override public voidonDestroy
() { // 服务关闭 }}
这几个方法可以和下图接合起来看,更加直观
服务的整个生命周期:和Activity一样,onCreate()-->onDestroy(),不管是用startService()还是binService(),onCreate()和onDestroy()都会被调用
服务的活性生命周期:如果由startService()开启服务的话,它的活性结束于onDestroy();而bindService()的活性结束则是onUnbind()
- Services生命周期
- Services的生命周期
- android services生命周期深刻认识
- android的Services生命周期和使用方法
- WCF RIA Services Domain Serive的生命周期和数据交互
- Services
- services
- Services
- services
- Services
- Services
- Services
- Services
- Services
- Services
- Services
- Services
- Services
- WPF ToggleButton
- Oracle DML流程
- grub启动镜像制作
- java.net.ConnectException: Call From db96/192.168.8.96 to db96:49002 failed on connection exception:
- LostPassword
- Services生命周期
- 杭电 2044
- Socket send函数和recv函数详解
- 阿牛的EOF牛肉串【杭电-2047】 附题
- LeetCode OJ算法题(三十六):Sudoku Solver
- min-height和min-width的用法
- Ubuntu 14.04 LTS鼠标闪烁和中文输入
- 各个版本内核源代码,以及opensshl等
- 快速排序