Android MVP粗来已经有段时间了,在项目中我也多多少少用了一些,不得不说代码使用这种模式后,条例确实清晰了好多,整个流程看起来有点各司其职的感觉(另一种的java面向对象的方式)。

  不过这里是我在使用过程中遇到的一点小优化,直接进入代码来说吧!!!

 import java.lang.ref.Reference;
import java.lang.ref.WeakReference; public class Presenter <T>{ private Reference<T> mReference = null; public void onAttach(T view){
mReference = new WeakReference<T>(view);
}; public boolean isAttach(){
return null != mReference && null != mReference.get();
} public void onDettach(){
if(null != mReference){
mReference.clear();
mReference = null;
}
};
}

  上述代码我这里简单说下,泛型的定义是为了给Activity及其子类声明使用(为啥这么说,因为presenter是专门针对View工作的,他的定义必须依赖于View的功能来完成.),这里可以看到我简单是采用了弱引用的方式去参数这个View的对对象引用,这里我主要考虑到万一Activity不走onDestroy方法,但是程序却退出了,现实中这种可能性很小,不过确实是存在的,弱引用主要就是为了这个目的而加的。

  紧接着一起来看BaseActivity

 public abstract class BaseActivity<V, T extends Presenter<V>> extends Activity{

     protected T mPresenter;

     @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresenter = createPresener();
mPresenter.onAttach((V) this);
} @Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mPresenter.onDettach();
} protected abstract T createPresener();
}

  这里可看到,这里由于是BaseActivity,我希望他去做的工作就是在Activty创建的时候先创建Presenter对象,并告知Presenter自己已经被创建,同时将自身注入给Presenter,以便于完成P到V的回调工作. T extent Presenter是为了保证createPrenter返回的事Presenter 的子类对象. 8行没有判空直接使用的目的是为了更好的使用MVP的思想,所以这里的抽象方法是不允许返回null的,这是我的个人设计,不过大家要是希望返回null,可以自己在进一步的坐下处理.

   之上的简单的VP交互,我是根据个人需求做的定义(Attach, Dettach, isAttach).

   

Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化的更多相关文章

  1. Android开发 静态static类与static方法持有Context是否导致内存泄露的疑问

    简述 在Android开发的过程中,难免会使用单例模式或者静态方法工具类.我们会让它们持有一些外部的Context或者View一般有以下几种情况: 单例模式,类的全局变量持有Context 或 Vie ...

  2. 【Android开发坑系列】之经常被忽略的背景图片内存泄露

    我们平时设置图片的时候,几乎都忘记回收老的(背景)图片,比如: TextView.setBackgroundDrawable() TextView.setBackgroundResource() Im ...

  3. 【转】.. Android应用内存泄露分析、改善经验总结

    原文网址:http://wetest.qq.com/lab/view/107.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.194 ...

  4. Android 性能优化之使用MAT分析内存泄露问题

    我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android ...

  5. 查找并修复Android中的内存泄露—OutOfMemoryError

    [编者按]本文作者为来自南非约翰内斯堡的女程序员 Rebecca Franks,Rebecca 热衷于安卓开发,拥有4年安卓应用开发经验.有点完美主义者,喜爱美食. 本文系国内ITOM管理平台 One ...

  6. Android 性能优化之使用MAT分析内存泄露

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/42396507),请尊重他人的辛勤劳动成果,谢谢! 我们平常 ...

  7. Android 内存泄露总结(附内存检测工具)

    https://segmentfault.com/a/1190000006852540 主要是分三块: 静态储存区:编译时就分配好,在程序整个运行期间都存在.它主要存放静态数据和常量. 栈区:当方法执 ...

  8. Android常见内存泄露,学会这六招优化APP性能

    很多开发者都知道,在面试的时候会经常被问到内存泄露和内存溢出的问题. 1.内存溢出(Out Of Memory,简称 OOM),通俗理解就是内存不够,即内存占用超出内存的空间大小. 2.内存泄漏(Me ...

  9. [转]谈谈关于MVP模式中V-P交互问题

    在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面.这是一个基于微软SCSF(Smart Client Software Factory)的项目,客户端是墨尔本一家事业单位.前两周,我奉命负 ...

随机推荐

  1. input type=file 图片上传相关

    HTML: <input type="file" name="address"   onchange='PreviewImage(this)' value ...

  2. About_Web

    成功网站的三要诀:内容.设计.营销 内容为王: 高质量的内容会促使网站走向成功.首先,用户有需求,他们需要被感动,被娱乐,被有料的内容和产品所吸引.漂亮的背景和亮骚的特效可能会有所助益,但终究只是辅助 ...

  3. 00 LabVIEW中类的动态类型处理

    1.父类使用自己的Method,连线默认为父类自己的控件 2.如果子类没有重写父类的Method,则子类使用父类方法时,直接创建出来即自己的数据类型   3.如果子类重写了父类的Method,则子类使 ...

  4. Deepin -Android Studio-Genymotion 之旅

    Deepin -Android Studio-Genymotion 之旅 暑假无聊中在deepin系统下配置好了android的开发环境,并使用了比较好的一款模拟器–Genymotion;下面是我配置 ...

  5. shFlags简介

    看到有脚本中使用了shFlags,于是google了一下,发现还是个挺方便的东西. https://github.com/kward/shflags/wiki/Documentation12x sha ...

  6. USACO翻译:USACO 2014 MARCH Silver三题

    USACO 2014 MARCH 一.题目概览 中文题目名称 农田灌溉 懒牛 牛叫 英文题目名称 irrigation lazy mooomoo 可执行文件名 irrigation lazy mooo ...

  7. TotalCommander 之 配置

    一.设置配置界面: 1.进入设置界面       点击菜单栏的配置,然后再点击配置里面的选项,便会出现Total Commander设置的界面. 2.设置字体 刚开始,大家会发现这不是我们熟悉的字体啊 ...

  8. 表单验证:$tablePrefix(定义表前缀);$trueTableName = 'yonghu',找到真实表名(yonghu)表;create($attr,0)两个参数;批量验证(返回数组);ajax+动态验证表单

    *$tablePrefix是定义在Model中的,优先级大于配置文件中,如果项目中表前缀全部比如为"a_",并且在配置文件中定义了 'DB_PREFIX'=>'a_' 后期如 ...

  9. Spring整理

    Bean配置 1. <context:component-scan base-package="com.test" />这个包下的Spring注解才有效 属性文件自动解 ...

  10. 给inpu加背景图,input内容又不能盖着背景图

    问题: 根据需要,给input添加背景图片,又需要点击input及input的这个背景触发事件,但是给input输入内容多时,会覆盖此背景(如下图), 图中,java人员使用插件省市区三级联动,需要i ...