我的Android进阶之旅------>Android服务的生命周期回调方法
先引用一段官网上的文字
==================================================================================================
Service Lifecycle
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
onStartCommand(Intent, int, 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 onStartCommand()), so no matter how many times it is started a service will be stopped once Context.stopService() or stopSelf() is called; however, services can use their
stopSelf(int)method to ensure the service is not stopped until started intents have been processed.
For started services, there are two additional major modes of operation they can decide to run in, depending on the value they return from onStartCommand():
START_STICKYis used for services that are explicitly started and stopped as needed, while
START_NOT_STICKYor
START_REDELIVER_INTENTare used for services that should only remain running while processing any commands sent to them. See the linked documentation for more detail on the semantics.
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 onStartCommand(). The client will receive the
IBinderobject 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 beenwritten in aidl.
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 startedorthere are one or more connections to it with the
Context.BIND_AUTO_CREATEflag. 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().
==================================================================================================
- 当采用Context.startService()方法启动服务,与之有关的生命周期方法
onStart()方法只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但是onStart()方法会被多次调用。
onDestory()方法在服务被终止时调用。
- 当采用Context.bindService()方法启动服务,与之有关的生命周期方法
onCreate()-->onBind()-->onUnbind()-->onDestory()
onBind()方法只有采用Context.bindService()启动服务时才会回调该方法。该方法在调用者和服务绑定时被调用,当调用者和服务已经绑定,多次调用Context.bindService()方法并不会导致该方法多次被调用。
onUnbind()方法只有采用Context.bindService()启动服务时才会回调该方法。该方法在调用者和服务解除绑定时被调用。
- 如果先采用Context.startService()方法启动服务,然后调用Context.bindService()方法绑定到服务,再调用 Context.unbindService()方法解除绑定,最后调用Context.bindService()方法再次绑定到服务,触发的生命周期方法如下:
onCreate()-->onStart()-->onBind()-->onUnbind()[重载后的方法需返回true]-->onRebind()
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
阅读更多
- 我的Android进阶之旅------>Android服务的生命周期回调方法
- 我的Android进阶之旅------>Android服务的生命周期回调方法
- Android中服务的生命周期回调方法
- Androidd开发Fragment生命周期中重要几个回调方法
- 服务的生命周期回调方法
- [置顶] 浅谈Android中的 Fragment、生命周期回调方法 以及使用
- Android 服务(service)的生命周期以及利用bindservice调用服务里面的方法
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!
- Android高手进阶教程(二十)之---Android与JavaScript方法相互调用!
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Android高手进阶教程(二十)之---Android与JavaScript方法相互调用!
- 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
- Android之Servic的生命周期和调用方法
- Android之Servic的生命周期和调用方法
- Android高手进阶教程(二十一)之---Android中创建与几种解析xml的方法!
- Android高手进阶教程(二十一)之---Android中创建与几种解析xml的方法!
- Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!
- Android高手进阶教程(二十一)之---Android中创建与几种解析xml的方法!
- android运行后台服务de生命周期yu使用技巧