Lifecycle获取Activity和Fragment生命周期

抛出问题:   

       经常,我们会用到单例模式,也就是静态类,并且静态类会传入一些回调(Listener)。但是,这个回调(Listener)会被单例模式所持有,此时问题来了,activity就会无法回收。导致内存泄漏。

解决方法:

1.  单例模式开放一个释放资源的接口(listener = null 的方法),activity在onDestory时,主动去调用一下,用来释放,这种方法可以,但是是否觉得这样做很low?而且很麻烦?

2.  单例模式里面持有回调(Listener)时,采用弱引用的方式持有,当activity回收时,就不会受影响,但是如果创建回调(Listener)时,采用的是匿名内部类的方式,就会存在,activity并结束,但是发生了一次gc,这个类就会被回收,导致程序无法拿到该有的回调:

    

3. 如果使用过Glide第三方库的同学,可能知道,Glide会根据activity的生命周期,来决定是否停止正在进行的加载

这种叫做Lifecycle。

我们可以根据传入的Activity或者Fragment对象,来获取这个Activity或者Fragment的生命周期:

activity和fragment自带了getLifecycle()方法,只需要注册一个生命周期的监听对象就行,注意,实现LifecycleObserver时,对应的方法,需要添加事件的注解,入上图红色箭头所指。


是否觉得,第三个方法,完爆1/2方法?这种生命周期的用法还有很多,比如用在MVP里面的P里面,这样就可以让P更加简洁的获取到V的生命周期,这种就不赘述了。

还有些其他异步加载方式的,都可以采用这种方式来解决,让代码看起来非常简洁。



猜你喜欢

转载自blog.csdn.net/fangqiangqi/article/details/81006595