安卓关于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了。