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的生命周期,这种就不赘述了。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值