Android MVP + 泛型,实现了友好VP交互及Activity潜在的内存泄露的优化
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潜在的内存泄露的优化的更多相关文章
- Android开发 静态static类与static方法持有Context是否导致内存泄露的疑问
简述 在Android开发的过程中,难免会使用单例模式或者静态方法工具类.我们会让它们持有一些外部的Context或者View一般有以下几种情况: 单例模式,类的全局变量持有Context 或 Vie ...
- 【Android开发坑系列】之经常被忽略的背景图片内存泄露
我们平时设置图片的时候,几乎都忘记回收老的(背景)图片,比如: TextView.setBackgroundDrawable() TextView.setBackgroundResource() Im ...
- 【转】.. Android应用内存泄露分析、改善经验总结
原文网址:http://wetest.qq.com/lab/view/107.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.194 ...
- Android 性能优化之使用MAT分析内存泄露问题
我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android ...
- 查找并修复Android中的内存泄露—OutOfMemoryError
[编者按]本文作者为来自南非约翰内斯堡的女程序员 Rebecca Franks,Rebecca 热衷于安卓开发,拥有4年安卓应用开发经验.有点完美主义者,喜爱美食. 本文系国内ITOM管理平台 One ...
- Android 性能优化之使用MAT分析内存泄露
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/42396507),请尊重他人的辛勤劳动成果,谢谢! 我们平常 ...
- Android 内存泄露总结(附内存检测工具)
https://segmentfault.com/a/1190000006852540 主要是分三块: 静态储存区:编译时就分配好,在程序整个运行期间都存在.它主要存放静态数据和常量. 栈区:当方法执 ...
- Android常见内存泄露,学会这六招优化APP性能
很多开发者都知道,在面试的时候会经常被问到内存泄露和内存溢出的问题. 1.内存溢出(Out Of Memory,简称 OOM),通俗理解就是内存不够,即内存占用超出内存的空间大小. 2.内存泄漏(Me ...
- [转]谈谈关于MVP模式中V-P交互问题
在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面.这是一个基于微软SCSF(Smart Client Software Factory)的项目,客户端是墨尔本一家事业单位.前两周,我奉命负 ...
随机推荐
- Python2 连接MySQL
先安装MySQL-python yum install -y MySQL-python 测试代码: # -*- coding: utf-8 -*- import os import MySQLdb i ...
- Leetcode 3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...
- js面向对象总结(一)
在 js 中,对象由特性(attribute)构成,特性可以是原始值,也可以是引用值.如果特性存放的是函数,它将被看作对象的方法(method),否则该特性被看作对象的属性(property).在js ...
- JavaScript 一种轻量级的编程语言
JavaScript 一种轻量级的编程语言 作为一名计算机应用专业的学生,大一上学期开始接触了网页设计和制作,刚开始时感觉做网页很不错,简单地写几行代码就能做出效果来,当时感觉很兴奋,渐渐的喜欢上它 ...
- javascript 减少回流
减少回流(REFLOWS) 当浏览器重新渲染文档中的元素时需要 重新计算它们的位置和几何形状,我们称之为回流.回流会阻塞用户在浏览器中的操作,因此理解提升回流时间是非常有帮助的. 回流时间图表 你应该 ...
- hihoCoder 1393 网络流三·二分图多重匹配(Dinic求二分图最大多重匹配)
#1393 : 网络流三·二分图多重匹配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 学校的秋季运动会即将开始,为了决定参赛人员,各个班又开始忙碌起来. 小Hi和小H ...
- 对接第三方支付接口-获取http中的返回参数
这几天对接第三方支付接口,在回调通知里获取返回参数,有一家返回的json格式,请求参数可以从标准输入流中获取. //1.解析参数 , 读取请求内容 BufferedReader br; String ...
- js 滚动的文字(走马灯)
// 滚动的文字 function marqueeScroll() { //var $target = $(".marquee_outer:visible"); if($(&quo ...
- Yii源码阅读笔记(三十)
Widget类是所有小部件的基类,开始,结束和渲染小部件内容的方法的注释: namespace yii\base; use Yii; use ReflectionClass; /** * Widget ...
- javascript 数字进制转换
//十进制转其他 var x=110; alert(x); alert(x.toString(8)); alert(x.toString(32)); alert(x.toString(16)); // ...