• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Handler造成的内存泄漏(一),handler泄漏

Handler造成的内存泄漏(一),handler泄漏

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了handler内存泄漏,handler内存溢出,handler,handler机制的原理,handler是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Handler造成的内存泄漏(一),handler泄漏


平时在处理网络任务或者封装一些请求回调等api都应该会借助Handler来处理。 

Handler如此常用,一个不小心,比较容易造成我们app的内存泄漏。

注意:我是用LeakCanary来检测内存是否泄漏,这个工具很多大型的公司都在用,比如酷狗,腾讯等等。

下载地址:https://github.com/square/leakcanary

 

①例子如图:(这是很多人平时经常的写的代码。)

  

分析: 在项目开发中,我们经常会写上面这样的代码吧? 在一个界面中加载数据loadData,加载数据完成后,发送Message,然后在在Handler的handlerMessage()中去处理我们的消息。

运行代码,我们做如下操作:

1. 点击按钮,在15秒内点击手机返回键,关闭MainActivity

2. 等待10秒左右

将会发现,LeakCanary提示内存泄漏:

 

分析泄漏的原因:

由于mhandler是Handler的匿名内部类的实例,所以它持有外部类Activity的引用,我们知道消息队列是在一个Looper线程中不断轮询处理消息,而消息队列中的Message持有mHandler实例的引用,mHandler又持有Activity的引用,那么当这个Activity退出时,消息队列中还有未处理的消息或者正在处理消息,将导致该Activity的内存资源无法及时回收,引发内存泄漏

 

处理办法一: 使用静态内部类,将上面的代码改一下

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Handler造成的内存泄漏(一),handler泄漏

相关文章

  • 2017-05-26Linux内核系列—操作系统开发之HelloWorld,linuxhelloworld
  • 2017-05-26android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明
  • 2017-05-26tomcat+java的web程序持续占cpu问题调试
  • 2017-05-26Android JDK配置使支持Gradle更新,Maven安装,gradlemaven
  • 2017-05-26android动画详解一 概述
  • 2017-05-26Eclipse迁移到Android studio步骤如下:,eclipseandroid
  • 2017-11-18android 时间工具类
  • 2017-05-26【1】Android 学习笔记 【第一个安卓程序】,android安卓
  • 2017-05-26make menuconfig Kconfig Makefile .config的关系
  • 2017-05-26Android应用程序内存泄漏介绍

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 项目总结手机号+短信验证码登录,手机号验证码
    • Android消息处理机制(Handler、Looper、MessageQueue与Message)
    • Android中"get","post"请求的其中三种常用数据提交方式,android常用数据
    • 我的android学习经历3,android学习经历3
    • Android开发学习——搭建开发环境,android搭建
    • Android Activity生命周期与启动模式,androidactivity
    • andriod 图片选择器,
    • Linux内核系列—8.操作系统开发之时钟中断,linux内核
    • PigeonCall:一款Android VoIP网络电话App架构的介绍
    • Android的消息机制,Android消息机制

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有