20161130

安卓关于adapter写在activity里面好还是外面好

我个人写的时候一般都分开写的,因为感觉写在activity里面有点low..,不过如果页面用到了分页还是会写在activity里的但是会加个static。

其实这两种方式都是可以的,但有一点很关键,那就是无论如何,adapter不能持有activity的引用,否则可能会因为adapter里面可能会做一些耗时操作,当activity finish时会因为被adapter持有引用而导致activity无法被回收,从而导致内存泄漏。

java中,非静态内部类对象是会隐式持有外部类引用的,也就是说adapter持有了activity的引用。所以就有将adapter写在单独的一个包中的做法,估计很多开发者都认为这样是为了让activity看起来更简洁。

然而adapter写在外面也会可能在adapter内持有Activity引用。因为很多时候adapter不可避免的需要和Activity交互,或者需要一个context对象,因为有时候要求是不但列表可以点击还得要列表内的东西可以点击,这时候不经意间就会在设置点击事件的时候和activity界面产生了联系。

这种情况下,adapter就持有了Activity引用,如果我们在adapter中进行耗时操作(比如加载图片之类的),并且finish Activity,虽然此时Activity销毁了,但是GC是无法回收activity的,而且Activity占用的内存还是比较大的,这样就发生了内存泄漏,解决办法则是从回调方法那处理。

首先处理getview里面inflate,当inflate一个xml时,完全可以使用parent的context

使用回调接口的方式来实现不持有activity的情况下交互

 

 

ok了。

 

转载于:https://www.cnblogs.com/zyd357344/p/6117974.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值