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作者

更多相关文章

  1. 工具:Android本地代码生成器
  2. Android很有用的代码片段
  3. android上传图片到服务器,求服务器那边和android的Activity的完整
  4. android 源代码研究之----frameworks-----status bar 状态栏
  5. Android 代码实现重启
  6. 【Arcgis android】 离线编辑实现及一些代码段
  7. Android 实现扫雷小游戏实例代码
  8. android代码分析,及Terminal使用
  9. Android应用程序绑定服务(bindService)的过程源代码分析(2)

随机推荐

  1. Android 关于WebView的相关属性
  2. 解决Eclipse3.6中Android 代码自动补全卡
  3. [Android] Android 使用 Greendao 操作 d
  4. Android(安卓)Sqlite 相关汇总
  5. Android实现自定义的 时间日期 控件
  6. 模仿天天动听的seekbar
  7. Android Studio中点击按钮跳转到其他页面
  8. Android MediaScannerJNI源码详解
  9. Android ViewPager 左右滑动-3
  10. Android 缩放图片