handler+WeakReference简单优化Activity
来源:互联网 发布:兼职seo软文代写 编辑:程序博客网 时间:2024/05/20 01:10
我们可能知道安卓引用对象的四中类型:强引用、软引用、弱引用、虚引用。但很少有人真正去使用这些,甚至不太清楚这些在程序代码中的作用,下面我就来简单分享一下我在代码中使用的弱引用WeakReference.
在程序中,我们用的比较多的就是handler机制了,但有没有想过handler给我们造成的严重的内存泄露问题?为什么这么说呢。Activity在被结束之后,MessageQueue并不会随之被结束,如果这个消息队列中存在msg,则导致持有handler的引用,但是又由于Activity被结束了,msg无法被处理,从而导致永久持有handler对象,handler永久持有Activity对象,于是发生内存泄漏。首先要想到的就是使用静态static,因为在java中所有非静态的对象都会持有当前类的强引用,而静态对象则只会持有当前类的弱引用。下面就开始看看我是怎么处理的吧。
private final mainHandler mHandler = new mainHandler(this); private static class mainHandler extends Handler { private final WeakReference<ListenClassFragment> mActivity; public mainHandler(ListenClassFragment activity) { mActivity = new WeakReference<ListenClassFragment>(activity); } @Override public void handleMessage(Message msg) { ListenClassFragment activity = mActivity.get(); if (activity != null) { activity.flushDataList(msg); } } }我们一个static和weakReference就很好的解决了这类内存泄露问题,接下来就来看看我在程序中是怎么使用的吧。
public void flushDataList(Message msg) { if (msg.what == 1) { dataList.addAll(dataListTmp); if (dataList != null) { listenClassAdapter.setData(dataList); listenClassAdapter.notifyDataSetChanged(); mListView.setPullLoadEnable(true); } else { mListView.setPullLoadEnable(false); } if (dataList.size() == 0) { mListView.setPullLoadEnable(false); rl_title.setVisibility(View.GONE); rl_none_one.setVisibility(View.VISIBLE); } else { rl_title.setVisibility(View.VISIBLE); rl_none_one.setVisibility(View.GONE); } dataListTmp.clear(); mListView.stopRefresh(); } else if (msg.what == 2) { dataList.addAll(dataListTmp); listenClassAdapter.setData(dataList); listenClassAdapter.notifyDataSetChanged(); dataListTmp.clear(); if (dataList.size() == 0) { rl_title.setVisibility(View.GONE); rl_none_one.setVisibility(View.VISIBLE); } else { rl_title.setVisibility(View.VISIBLE); rl_none_one.setVisibility(View.GONE); } mListView.setPullLoadEnable(false); mListView.stopLoadMore(); } }这就是简单的从服务器获取数据之后,通过这个handler来给listview的适配器添加数据。
通过这个 mHandler.sendEmptyMessage(?);来控制是下拉刷新的数据还是上拉加载的数据。代码来自于习惯,好的习惯能很好的优化程序。
阅读全文
1 0
- handler+WeakReference简单优化Activity
- Activity Handler 使用 WeakReference
- Handler利用WeakReference回收activity
- Handler使用WeakReference
- Android Handler WeakReference 处理
- Android Handler内部类+WeakReference
- weakreference handler android莫须有的罪名
- android weakreference内存进行优化
- handler的性能优化之弱引用持有activity
- WeakReference
- WeakReference
- WeakReference
- WeakReference
- WeakReference
- Android内存优化(SoftReference 和 WeakReference )
- Android内存优化(SoftReference 和 WeakReference )
- Android内存优化(SoftReference 和 WeakReference )
- Android Handler leak 分析及解决办法,使用WeakReference
- php iconv() 编码转换出错 Detected an illegal character
- Codeforces 371D Vessels【思维+并查集】经典套路题
- drop truncate delete的区别
- 八大排序算法(Java实现)
- Spyder中import tensorflow出现问题
- handler+WeakReference简单优化Activity
- Fence Repair
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
- tomcat 三种静态部署方式
- split函数解析
- c++取模运算/求余运算
- vb.net 教程 4-3 文件操作 FileInfo 2
- IntelliJ IDEA 安装插件 (vue)
- 垃圾回收参数