1,LifeCycle的的使用主要解决
- 代码的入侵问题
- 内存泄漏的问题
- 统一管理的问题
主要用于Activity/Fragment/Service,App的生命周期的监听,做一些全局的操作,实现解耦
使用场景如下:
1)在BaseActivity中添加注册监听,在onStop中取消当前界面指定的网络请求
2)定位的开启和关闭
使用步骤:
1)创建监听处理的对象,实现LifeCycleObserver的接口
2)在需要的方法上添加OnLifeCycleEvent的注解
class LocationListener :LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
private fun startLocationAction(){
/**
* 打开定位
*/
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
private fun stopLocationAction(){
/**
* 关闭定位
*/
}
}
3)在Activity的OnCreate方法中添加注册监听
val locationListener = LocationListener()
lifecycle.addObserver(locationListener)
2,LifeCycleService的基本使用
LifeCycleService主要用于监听Service的生命周期,达到Service与组件间的解耦,使用时实现LifeCycleObserver 接口,并添加lifecycle-extensions的依赖,使用的Service需要继承至LifecycleService
试例如下
1)创建ServerObserver监听对象
class SocketServiceObserver :LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
private fun connectSocket(){
/**
* 当Service的onCreate方法被调用时,该方法会被调用
*/
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
private fun disConnectSocket(){
/**
* 当Service的onDestroy方法被调用时,该方法会被调用
*/
}
}
2)创建Service继承至LifecycleService,在init方法中创建监听对象并添加注册监听
class SocketService : LifecycleService() {
init {
val socketServiceObserver = SocketServiceObserver()
lifecycle.addObserver(socketServiceObserver)
}
}
3,ProcessLifecycleOwner的使用
使用ProcessLifecycleOwner可以监听应用前后台之间的切换
使用实例如下:
1)创建Kotlin类 实现LifecycleObserver的接口
class AppObserver :LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(){
/**
* 在应用的整个生命周期中只会调用一次
*/
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart(){
/**
* 当应用在前台时被调用
*/
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume(){
/**
* 当应用在前台出现时调用
*/
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause(){
/**
* 当应用推出到后台时被调用
*/
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop(){
/**
* 当应用推出到后台时被调用
*/
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy(){
//永远不会被调用
}
}
2)在Application的onCreate方法中添加注册监听
class LifeCycleApp :Application() {
override fun onCreate() {
super.onCreate()
val appObserver = AppObserver()
ProcessLifecycleOwner.get().lifecycle.addObserver(appObserver)
}
}
完成之后,即可实现App生命周期的监听,实现业务间的解耦