Android 优化Handler防止内存泄露

Demo描述:
Handler可能导致的内存泄露及其优化
1 关于常见的Handler的用法但是可能导致内存泄露
2 优化方式请参考BetterHandler和BetterRunnable的实现
package cc.cc;
import java.lang.ref.WeakReference;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
/**
* Demo描述:
* Handler可能导致的内存泄露及其优化
*
* 1 关于常见的Handler的用法但是可能导致内存泄露
* 请参考方法initHandler()
* 2 优化方式请参考BetterHandler和BetterRunnable的实现
*
*
*
*/
public class MainActivity extends Activity {
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 常见的Handler的用法但是可能导致内存泄露
*
* 比如在旋转屏幕时该Activity重新绘制.
* 但是因为mHandler发送了一个延迟消息,所以消息队列持有mHandler对象
* 又由于new Runnable(){}持有外部类MainActivity的引用
* 所以Activity所占内存并不能向期望的那样被回收,这样就可能会造成内存泄漏.
*
* 这个例子中Handler的延迟时间比较久有20S,有点极端了,一般不会这么干;
* 这里只是为了更好地说明这个问题就这么写代码了。
*
*/
private void initHandler() {
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
// ......doing something
// ......doing something
// ......doing something
// 发送延迟消息
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
}
}, 1000 * 20);
}
/**
* 以下为优化方式
* 1 在此处把BetterHandler和BetterRunnable都设计为静态类,
* 这样它们就不会持有外部类的引用了.
* 2 在BetterHandler中利用WeakReference持有Activity.
* 常听说:"如果一个对象具有弱引用,那么当GC线程扫描的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存"
* 其实准备地说应该是"如果一个对象只具有弱引用.........",即仅有弱引用而不存在对其的强引用才会将其回收.
* 那么此处对Activity采用了弱引用,会不会导致该Activity被回收呢?
* 答案是否定的。因为此处的Activity还在显示界面,当然存在其他对象对它的强引用。所以不会对其回收。
*
* 经过这样的优化,当旋转屏幕时需要销毁原Activity时;消息队列持有Handler对象.但此时Handler对象不再持有Activity的引用.
* 所以系统会回收该Activity所占内存.所以在handleMessage()中处理消息时需要判断Activity是否为空.
* 比如此处20秒后才处理消息 这个时候Activity为空.
*/
private static class BetterHandler extends Handler{
private final WeakReference<Activity> activityWeakReference;
public BetterHandler(Activity activity){
activityWeakReference=new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (activityWeakReference.get()!=null) {
//.....handle message
} else {
System.out.println("Activity==null");
}
}
}
//同样采用静态内部类
private static class BetterRunnable implements Runnable{
@Override
public void run() {
// ......doing something
}
}
//发送延迟消息
private void sendMessage(){
BetterHandler betterHandler=new BetterHandler(MainActivity.this);
betterHandler.postDelayed(new BetterRunnable(), 1000 * 20);
}
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# 优化Handler。Android
# 优化Handler防止内存泄露的方法
# 总结Android App内存优化之图片优化
# Android性能优化之利用强大的LeakCanary检测内存泄漏及解决办法
# 详解Android的内存优化--LruCache
# Android性能优化之利用Rxlifecycle解决RxJava内存泄漏详解
# Android Bitmap详解及Bitmap的内存优化
# 浅谈Android性能优化之内存优化
# 详解Android内存泄露及优化方案
# 详解Android内存优化策略
# Android 内存优化知识点梳理总结
# 请参考
# 对其
# 所占
# 为空
# 时需
# 地说
# 还在
# 如有
# 才会
# 会不会
# 这个问题
# 将其
# 而不
# 希望能
# 采用了
# 这个时候
# 并不能
# 谢谢大家
# 后才
# 如在
相关文章:
香港服务器WordPress建站指南:SEO优化与高效部署策略
网页设计与网站制作内容,怎样注册网站?
如何确保FTP站点访问权限与数据传输安全?
定制建站价位费用解析与套餐推荐全攻略
招贴海报怎么做,什么是海报招贴?
如何在建站之星绑定自定义域名?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
建站之星代理费用多少?最新价格详情介绍
,怎么在广州志愿者网站注册?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
学校为何禁止电信移动建设网站?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何快速搭建个人网站并优化SEO?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
,怎么用自己头像做动态表情包?
相册网站制作软件,图片上的网址怎么复制?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
网站制作话术技巧,网站推广做的好怎么话术?
公司网站制作价格怎么算,公司办个官网需要多少钱?
小建面朝正北,A点实际方位是否存在偏差?
如何快速查询域名建站关键信息?
详解jQuery中基本的动画方法
如何在企业微信快速生成手机电脑官网?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
Python lxml的etree和ElementTree有什么区别
导航网站建站方案与优化指南:一站式高效搭建技巧解析
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
北京制作网站的公司,北京铁路集团官方网站?
深圳网站制作案例,网页的相关名词有哪些?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
一键网站制作软件,义乌购一件代发流程?
,制作一个手机app网站要多少钱?
如何通过免费商城建站系统源码自定义网站主题与功能?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
建站之星展会模板:智能建站与自助搭建高效解决方案
大型企业网站制作流程,做网站需要注册公司吗?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
安徽网站建设与外贸建站服务专业定制方案
建站之星免费版是否永久可用?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
如何快速搭建高效可靠的建站解决方案?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
*请认真填写需求信息,我们会在24小时内与您取得联系。