Android 防内存泄露handler

1.使用弱引用 WeakRefHander

    /**
* 作者: allen on 15/11/24.感谢开源作者https://coding.net/u/coding/p/Coding-Android/git
*/ /**
* 弱引用 handler 防止内存泄露
*/
public class WeakRefHander extends Handler { private final WeakReference<Handler.Callback> mRef;
private final int mLoopTime;
private int NO_LOOP = -1;
private int what =0; /**
* 循环
*
* @param loopAction
* @param loopTime
*/
public WeakRefHander(Handler.Callback loopAction, int loopTime) {
super();
this.mRef = new WeakReference<>(loopAction);
this.mLoopTime = loopTime; } /**
* 不循环
*
* @param loopAction
*/
public WeakRefHander(Handler.Callback loopAction) {
super();
mRef = new WeakReference<>(loopAction);
mLoopTime = NO_LOOP;
} @Override
public void handleMessage(Message msg) {
Handler.Callback action = mRef.get();
if (action != null) {
action.handleMessage(msg);
if (mLoopTime != NO_LOOP) {
sendEmptyMessageDelayed(what, mLoopTime);
}
}
} public void start() {
removeMessages(0);
sendEmptyMessageDelayed(0, 0);
} public void start(int what, long delay) {
this.what = what;
removeMessages(what);
sendEmptyMessageDelayed(what, delay);
} public void stop() {
removeMessages(what);
} public void clear() {
removeMessages(what);
mRef.clear();
}
}

2. 实现 Activity implements WeakRefHander.Callback

3. 在handleMessage处理业务逻辑

演示样例代码:

    public class MainActivity extends AppCompatActivity implements WeakRefHander.Callback {
private WeakRefHander weakRefHander;
private static final int HANDLER_MESSAGE_START = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
weakRefHander = new WeakRefHander(this, 1);
weakRefHander.start(HANDLER_MESSAGE_START, 1000 * 30);
} @Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case HANDLER_MESSAGE_START:
//Todo 处理业务逻辑
break;
default:
break;
}
return true;
} @Override
public void onResume() {
super.onResume();
weakRefHander.start();
} @Override
public void onPause() {
weakRefHander.stop();
super.onPause();
} @Override
protected void onDestroy() {
weakRefHander.clear();
super.onDestroy();
}
}

-Github演示样例參考代码

參考作者:-Coding-Android作者

Android 防内存泄露handler的更多相关文章

  1. Android App 内存泄漏Handler

    Android App 内存泄露之Handler Handler也是造成内存泄露的一个重要的源头,主要Handler属于TLS(Thread Local Storage)变量,生命周期和Activit ...

  2. Android 的内存泄露和内存限制

    转载自 https://blog.csdn.net/goodlixueyong/article/details/40716779 https://blog.csdn.net/vshuang/artic ...

  3. Android 常见内存泄露 & 解决方案

    前言 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃 (OOM) 等严重后果. 那什么情况下不能被 ...

  4. Android App 内存泄露之调试工具(1)

    Android App 内存泄露之工具(1) 使用内存监測工具 DDMS –> Heap 操作步骤 启动eclipse后,切换到DDMS透视图,并确认Devices视图.Heap视图都是打开的, ...

  5. 关于Android 的内存泄露及分析

    一. Android的内存机制Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似.程序员通过new为对象分配内存,所有对象在java堆内分配空间:然而对象的释 ...

  6. 如何用MAT分析Android应用内存泄露

    使用工具:Android Studio 2.0 Preview, Android Device Monitor, MAT(Memory Analyzer). 点击Android Studio工具栏上的 ...

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

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

  8. Android之内存泄露、内存溢出、内存抖动分析

      内存   JAVA是在JVM所虚拟出的内存环境中运行的,内存分为三个区:堆.栈和方法区.栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放.优点:速度快.堆(heap) ...

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

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

随机推荐

  1. zabbix 3.2 高可用实现方式二-pacemaker+corosync实现zabbix高可用集群

    一.pacemaker 是什么 1.pacemaker 简单说明 2.pacemaker 由来 二.pacemaker 特点 三.pacemaker 内部结构 1.群集组件说明: 2.功能概述 四.c ...

  2. ldap数据库--ODSEE--安装

    在安装之前最好查看一下服务器硬件是否满足要求,是否需要更改一些系统配置来达到使用ldap数据库的最有性能.实际使用的ldap数据库是oracle的产品,DS70即ODSEE. 安装环境:solaris ...

  3. mac下selenium+python环境搭建

    selenium2+python的环境搭建主要需要python和selenium 1.python mac下自带了python,可以查看版本.当然可以选择安装其它版本的python. 2.seleni ...

  4. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

  5. 如何添加title左侧的图标

    在titile标签上方插入以下代码,图片要求格式必须是.ico. <link rel="shortcut icon" href="images/favicon.ic ...

  6. Xshell 的安装教程

    Xshell就是一个远程控制RHEL的软件:其他的还有很多,用什么都无所谓(根据公司情况). 下面我们来安装下这个工具: 双击exe 点下一步: 选 免费的 然后下一步:(免费的功能足够用了) 点接受 ...

  7. 使用PHP文件锁写一个多个请求同时并发写入一个文件,要求不脏读、数据不丢失

    使用PHP文件锁写一个多个请求同时并发写入一个文件,要求不脏读.数据不丢失. //并发文件操作 function filehandle($filename,$data){ $start = 0; $e ...

  8. javascript内存管理(堆和栈)和javascript运行机制

    内存基本概念 内存的生命周期: 1.分配所需的内存 2.内存的读与写 3.不需要时将其释放 所有语言的内存生命周期都基本一致,不同的是最后一步在低级语言中很清晰,但是在像JavaScript 等高级语 ...

  9. 优雅的使用Chrome调试Node程序

    前言 我不知道大家用什么来调试node程序.可能有的人用node-inspect,但是这货很久没更新了,而且一堆的bug用起来很不爽:可能有的人用命令行来,但是这样操作不够灵活:还有人只用consol ...

  10. python基础教程——函数

    定义函数 //abstest.py def my_abs(x): if x >= 0: return x else: return -x 在该文件的当前目录下启动python解释器,用 from ...