#### Lifecycle
Lifecycle完美解决了组件对页面生命周期的依赖问题,使组件能够自己管理其生命周期。
系统组件(Activity/Fragment、Service和Application),有生命周期。
普通组件(也就是非系统组件/自定义组件)无法主动获知系统组件的生命周期事件。
Lifecycle可以帮助创建可感知生命周期的组件。
具体实现:
1、页面实现LifecycleOwner接口(在新版本的SDK中,Activity已经默认实现了该接口)。
2、观察者实现LifecycleObserver接口(该接口没有接口方法,无须任何具体的实现)。
3、在被观察者页面中通过getLifecycle().addObserver(observer)使观察者与被观察者绑定即可。
另外,拥有生命周期概念的组件除了Activity和Fragment,还有Service,要监听Service的生命周期,Android提供了一个类叫LifecycleService。该类继承自Service,并实现了LifecycleOwner接口。
例子:
class MyLocationListener: LifecycleObserver{ private val TAG = MyLocationListener::class.java.simpleName private lateinit var onLocationChangedCallback: OnLocationChangedCallback @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) private fun startGetLocation(){ Log.d(TAG, "startGetLocation()") } @OnLifecycleEvent(Lifecycle.Event.ON_STOP) private fun stopGetLocation(){ Log.d(TAG, "stopGetLocation()") } fun setOnLocationChangedCallback(callback: OnLocationChangedCallback){ this.onLocationChangedCallback = callback } }
class LifecycleActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_lifecycle) val listener = MyLocationListener() listener.setOnLocationChangedCallback(object : OnLocationChangedCallback { override fun onChange() { } }) // 将观察者与被观察者绑定 lifecycle.addObserver(listener) } }