Android 防内存泄露handler
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的更多相关文章
- Android App 内存泄漏Handler
Android App 内存泄露之Handler Handler也是造成内存泄露的一个重要的源头,主要Handler属于TLS(Thread Local Storage)变量,生命周期和Activit ...
- Android 的内存泄露和内存限制
转载自 https://blog.csdn.net/goodlixueyong/article/details/40716779 https://blog.csdn.net/vshuang/artic ...
- Android 常见内存泄露 & 解决方案
前言 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃 (OOM) 等严重后果. 那什么情况下不能被 ...
- Android App 内存泄露之调试工具(1)
Android App 内存泄露之工具(1) 使用内存监測工具 DDMS –> Heap 操作步骤 启动eclipse后,切换到DDMS透视图,并确认Devices视图.Heap视图都是打开的, ...
- 关于Android 的内存泄露及分析
一. Android的内存机制Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似.程序员通过new为对象分配内存,所有对象在java堆内分配空间:然而对象的释 ...
- 如何用MAT分析Android应用内存泄露
使用工具:Android Studio 2.0 Preview, Android Device Monitor, MAT(Memory Analyzer). 点击Android Studio工具栏上的 ...
- 【转】.. Android应用内存泄露分析、改善经验总结
原文网址:http://wetest.qq.com/lab/view/107.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.194 ...
- Android之内存泄露、内存溢出、内存抖动分析
内存 JAVA是在JVM所虚拟出的内存环境中运行的,内存分为三个区:堆.栈和方法区.栈(stack):是简单的数据结构,程序运行时系统自动分配,使用完毕后自动释放.优点:速度快.堆(heap) ...
- Android常见内存泄露,学会这六招优化APP性能
很多开发者都知道,在面试的时候会经常被问到内存泄露和内存溢出的问题. 1.内存溢出(Out Of Memory,简称 OOM),通俗理解就是内存不够,即内存占用超出内存的空间大小. 2.内存泄漏(Me ...
随机推荐
- spring boot一个简单用户管理DEMO
概述 该Demo旨在部署一个简单spring boot工程,包含数据编辑和查看功能 POM配置 <?xml version="1.0" encoding="UTF- ...
- localstorage本地定时缓存
在做一个网站时,起初直接就是从服务器获取数据进行交互,没有用一些本地缓存做优化,项目做下来就特别卡,并且对服务器造成了很大的压力,经过请教,查询,找到这样一个定时缓存的例子.html5定时缓存,从数据 ...
- C#编写的艺术字类方法
代码如下: using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing ...
- c# RSA加密和解密
"); Console.WriteLine(encodeString); string decode = MyRSA.Decrypt(encode ...
- js的call() ,apply() 两种方法的区别和用法,最白话文的解释,让枯燥滚粗!
百度了一圈calll()函数和apply()函数,感觉还是糊里糊涂 正好我前几天刚又重新翻了一遍 那本 600多页 的圣经书,我习惯时不时的去打下基础,只是为了用来装逼,给人讲解....(我是有多蛋疼 ...
- [转载] linux中文件描述符fd和文件指针flip的理解
转载自http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通 ...
- linux操作系统基础篇(八)
shell脚本的变量以及正则表达式 一.变量 含义:程序的运行就是一些列状态的变量->用变量值的变化去表示. 命名规则 以字母或下划线开头,剩下的部分可以是:字母.数字.下划线. 最好遵循下述规 ...
- TCP:传输控制协议
概述: 书中采用了8章来介绍TCP,可见其重要性.TCP是一种面向连接的.可靠的字节流服务,也就是说两方要交换数据必须先建立一个连接. TCP的信息单位称为segment.TCP对字节流的内容不作任何 ...
- (五)solr7.1.0之solrJ的使用
(五)solr7.1.0之solrJ的使用 下面是solr7的官网API介绍: 网页翻译的不是很准确,只能了解个大概,基本能获取如下信息: 一.构建和运行SolrJ应用程序 对于用Maven构建的项目 ...
- SparseArray,SparseBooleanArray和SparseIntArray
package android.util; import com.android.internal.util.ArrayUtils; /** * SparseArrays 利用integer去管理ob ...