博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 防内存泄露handler
阅读量:6493 次
发布时间:2019-06-24

本文共 2873 字,大约阅读时间需要 9 分钟。

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
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(); } }

-

參考作者:-

转载地址:http://cekyo.baihongyu.com/

你可能感兴趣的文章
/bin/bash^M: bad interpreter: No such file or dire
查看>>
python xml rpc
查看>>
Java设置以及获取JavaBean私有属性进阶
查看>>
db2表结构导出导入,数据库备份
查看>>
策略模式
查看>>
第二 周作业总结
查看>>
OrderOnline——项目概述
查看>>
POJ-2739(Water)
查看>>
【转】第三节 UNIX文件系统结构
查看>>
为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录
查看>>
关于windows2008r2系统80端口被system进程占用的问题
查看>>
Angular7里面实现 debounce search
查看>>
Linux 内核链表
查看>>
git学习------>Git 分支管理最佳实践
查看>>
awk-for循环简单用法
查看>>
总是想把Linux服务器上的重要文件备份到本地,在此转一篇实现windows和linux互传文件的文章...
查看>>
经典网页设计:25个精美的全屏背景网站设计作品
查看>>
括号和出栈所有序列问题
查看>>
第一次操刀数据库分表的教训与经验
查看>>
录音声音小
查看>>