一 、实用案例
xml 页面中有一个 webview
需要:
页面中的webview 需要在activity 销毁时销毁,回收。
原本实现 :
在acitvity 中
override fun onDestroy() { webview.destroy() super.onDestroy() }
如果有很多的生命周期变化,就会调用很多次。页面内容比较多。
lifecycle 引用:
自定义webview
class MyWebview : WebView, LifecycleObserver { constructor(context: Context,attributionSource: AttributeSet):super(context,attributionSource); @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) open fun onDestroy(){ Log.e("xxx","生命周期OnDestroy"); destroy() } }
在activity 中
myWebview=findViewById(R.id.webview) lifecycle.addObserver(myWebview!!)
简单实用就是这样,内部实现,是通过
public class LifecycleRegistry extends Lifecycle { /** * Custom list that keeps observers and can handle removals / additions during traversal. * * Invariant: at any moment of time for observer1 & observer2: * if addition_order(observer1) < addition_order(observer2), then * state(observer1) >= state(observer2), */ private FastSafeIterableMap<LifecycleObserver, ObserverWithState> mObserverMap = new FastSafeIterableMap<>();
FastSafeIterableMap 来管理生命监听对象。