Android内存泄露

2023-10-30

Android内存泄露概述

  了解Android内存泄露之前,需要对java的内存管理和GC机制有个简单的了解。
  Android内存泄露的根本原因是引用者的生命周期大于被引用者。举个例子,有对象A,B,B有A的强引用,GC要回收A时发现B还未销毁,所以A也未能被回收。

Android的内存泄露后果

  1. 直接后果是,内存泄露导致空间浪费,最终导致内存溢出;
  2. 间接后果是,内存不足导致频繁GC,系统性能下降

Android内存泄露场景

  1. 单例模式中引用四大组建,最常见的是单例中引用Activity的context,导致该Activity在内存中存活的周期和Application一样长,GC无法正常回收。
      解决办法:单例模式应用ApplicationContext,该引用和应用的生命周期一样长
  2. 非静态内部类或匿名内部类,该类对象持有外部类的强引用,如果该类的对象进行耗时操作,无法短期内被回收,那他持有的外部对象也无法及时回收,典型场景有:匿名Thread类异步执行耗时操作,非静态Handler对象,其中有未完成的异步信息。
      解决办法:内部类如果任务繁重,可以考虑使用静态内部类,静态内部类独立于外部类存在,典型的应用场景如RecyclerView中的VIewHolder。
  3. 集合中存储静态对象,导致集合占用的空间无法及时释放。
      解决办法:。。。
  4. 资源没有关闭,例如文件操作、网络流、广播未注销、Service脱离Activity未停止运行、观察者模式未解除监听等等。
      解决办法:养成良好的编程习惯,成对出现的open,close要一起使用。

补充学习一下java的各种引用

  1. 强引用:最通用的引用,比如 B b = new B(),b就是一个强引用,这样该引用存在,GC就不会回收,这也是导致java内存泄露的根本原因;
  2. 软引用:当内存不够时,GC会先回收这类引用;SoftReference bs = SoftReference(b);
  3. 弱引用:当GC发现一个对象只有弱引用时,马上回收它,WeakReference sr = new WeakReference(b);
  4. 虚引用:类似于占位符,不影响实际对象的生命周期,GC该怎么做就怎么做。
      综上,是java提供的几种引用机制,如果我们加以利用,可以一定程度上减少内存泄露情景,具体用法网上很多,我也正在学习当中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android内存泄露 的相关文章

  • 将数据从服务传递到活动

    我有自行运行的服务 服务自动启动 我有活动 在此 Activity 按钮中启动该方法DoIt Button setOnClickListener new OnClickListener public void onClick View v
  • 如何在 Android 中更改 Drawable 的颜色?

    我正在开发一个 Android 应用程序 并且我有一个从源图像加载的可绘制对象 在此图像上 我想将所有白色像素转换为不同的颜色 例如蓝色 然后缓存生成的 Drawable 对象 以便稍后使用它 举例来说 假设我有一个 20x20 PNG 文
  • Android:初始化本机 AudioRecord 对象时 AudioRecord 错误代码 -20

    Android 我想从麦克风读取缓冲区 以便我可以对其执行处理 以下是我的代码 int sampleRateInHz 8000 44100 22050 and 11025 int channelConfig AudioFormat CHAN
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • 拖动时跳转 ImageView。 getX() 和 getY() 值正在跳跃

    我创建了一个用于拖动视图的 onTouchListener 如果我使用的话 图像可以顺利拖动getRawX and getRawY 问题是 当您向下放置第二个指针然后抬起第一个指针时 图像将跳转到第二个指针 此 onTouchListene
  • 如果使用grifika的ContinualCaptureActivity中的预览方式,相机预览的视野会更小

    我们知道 当相机预览比例设置为时 在相同距离下我们会得到更大的预览视野4 3代替16 9 具体如下 Android Camera API 奇怪的缩放效果 https stackoverflow com questions 20664628
  • 华为手机“受保护的应用程序”设置及处理方法

    我有一台搭载 Android 5 0 的华为 P8 用于测试应用程序 该应用程序需要在后台运行 因为它跟踪 BLE 区域 我发现华为内置了一个名为 受保护的应用程序 的 功能 可以从手机设置 电池管理器 gt 受保护的应用程序 访问该功能
  • Android上如何获取ImageView的Drawable的矩形?

    我想要获取将包裹 ImageView 的 Drawable 的矩形对象 而不是包裹 ImageView 的矩形 我将使用该矩形在 Drawable 周围绘制一些奇特的矩形 我怎样才能得到那个矩形 Rect rect new Rect Ima
  • React Native Expo StackNavigator 重叠通知栏

    我正在尝试为我的 React Native Expo 应用程序实现导航栏 这里有一个问题 dependencies expo 18 0 3 react 16 0 0 alpha 12 react native 0 45 1 react na
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • MIUI 权限被拒绝活动 KeyguardLocked

    当应用程序处于后台且屏幕被锁定时 我无法启动活动 没有异常或警告 只是不调用 onCreate 我一直在与这个问题作斗争 我想我终于找到了它的根源 日志中有一行 D com android server am ExtraActivityMa
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • 当 minifyEnabled 为 true 时 Android 应用程序崩溃

    我正在使用多模块应用程序 并且该应用程序崩溃时minifyEnabled true in the installed模块的build gradle 以下是从游戏控制台检索到的反混淆堆栈跟踪 FATAL EXCEPTION Controlle
  • Android 中的 OpenGL 缩小

    我正在使用 3D 对象并渲染它并通过扩展 GLSurfaceView 实现渲染器来显示它 问题是如何通过捏合和捏合进行缩小 下面是我的班级 package com example objLoader import java nio Byte
  • onTaskRemoved() 在华为和小米设备中没有被调用

    我一直在使用onTaskRemoved 服务中的方法 用于检测应用程序何时通过滑动从设备最近列表中删除 我执行一些日志记录和发生这种情况时需要执行的一些其他操作 它工作完美 然后我在运行Android 6 0的华为设备上检查了这个方法 该方
  • 如何将样式应用于我拥有的所有 TextView? [复制]

    这个问题在这里已经有答案了 可能的重复 设计所有 TextView 或自定义视图 的样式 而不向每个 TextView 添加样式属性 https stackoverflow com questions 6801890 styling all
  • 当目标小于 Android O 时,如何在 Android O 上创建快捷方式?

    背景 Android O 对快捷方式的工作方式进行了各种更改 https developer android com preview behavior changes html as https developer android com
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • fs-extra:源和目标不能相同。 (科尔多瓦)

    我在使用 cordova 构建时遇到错误 Error Source and destination must not be the same 构建系统 Ionic ionic cli 4 10 1 ionic framework ionic
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try

随机推荐

  • 批量生成固定格式的图片,写上不同的文字

    批量生成下面这种标签 图片 红色圈起的位置和二维码要根据excel的数据动态变化 二维码扫出来是订单编号 思路 1 xlrd库读取excel数据 2 用MyQR库生成订单号的二维码 3 pillow库生成适当大小的空白底图 先是把二维码图片
  • H5 DOM 全屏 api requestFullscreen

    文章转载自 http javascript ruanyifeng com htmlapi fullscreen html toc7 js 设置 退出和判断全屏的方法 设置全屏 退出全屏 全屏属性 全屏事件 全屏状态的CSS 设置全屏 req
  • 操作系统基础-多线程处理浅析

    对于一个大型的复杂项目 或者多人协作的项目 如何处理同时运行的线程 如何在线程之间传递消息 处理同步是首要问题 经历过C 技术面的同学应该深有体会 在面试中 多线程 观察者模式 数据总线 事件总线都是经常被问到的重灾区 最近在工作中遇到的此
  • Python 多线程-共享全局变量问题

    多线程 共享全局变量问题 多线程可能遇到的问题 假设有两个线程t1和t2 都要对一个变量g num进行运算 1 两个线程t1和t2分别对g num各加10次 g num的最终结果 import threading import time g
  • 定向越野(添加任务信息和根据坐标位置触发游戏)

    1 首先获取任务地点的实际坐标值 用hashmap存储 HashMap
  • matlab里的随机数函数,MATLAB中常用的产生随机数的几种函数

    1 rand函数 rand函数用于产生在区间 0 1 的均匀随机数 它是平均分布在 0 1 之间 一个称为seed的值则是用来控制产生随机数的次数 均匀随机数函数的语法为rand n rand m n 其结果分别产生一矩阵含n n个随机数和
  • uniapp之最新获取用户昵称以及头像

    目录 前言 一 只展示不传递给后端 二 方法二 前言 在uniapp登录时候最开始想的就是手机号登录之后 就获取用户的昵称以及头像 存储起来 登录的时候直接显示在我的页面 最开始使用的是 uniapp官网自带的uni getUserProf
  • C语言简易学生管理系统(含源码)

    项目部分截图 以下是完整源代码 cpp文件 include StudentManagerSystem h int main 改变控制台字体颜色 SetConsoleTextAttribute GetStdHandle STD OUTPUT
  • java 力扣 88题 合并两个有序数组

    class Solution public void merge int nums1 int m int nums2 int n List
  • SpringBoot定时任务注解@Scheduled中fixedRate和fixedDelay

    Scheduled fixedRate 2000 public void myJob1 System out println LocalDateTime now 定时任务O O 休眠模拟代码块运行的时间 try TimeUnit SECON
  • 电路的等效变换(二)

    文章目录 一 电路的等效变换 等效有什么作用 等效变换的特点 二 电阻的串联和并联 三 电压源 电流源的串联和并联 电压源与支路的串 并联等效 理想电流源的串联和并联 电流源与支路的串 并联等效 四 实际电源的两种模型及其等效变换 之前的K
  • 如何把访问局域网时保存的密码给清除?

    问 一次在局域网中访问其他电脑时 弹出窗口需要我输入用户名和密码 结果我选择了 保存密码 项 以后每次访问那台电脑时都不需要输入密码了 这台电脑马上将会让给其他人用了 我现在想清除先前保存的那个密码 不知如何操作 答 要想清除保存的密码可以
  • 基于matlab的车牌定位算法设计与实现,原创】基于matlab的汽车牌照识别系统设计与实现...

    原创 基于matlab的汽车牌照识别系统设计与实现 由会员分享 可在线阅读 更多相关 原创 基于matlab的汽车牌照识别系统设计与实现 14页珍藏版 请在人人文库网上搜索 1 基于matlab的汽车牌照识别系统设计与实现摘要 本次作业的任
  • keil如何下载STM32芯片F1/F4固件库

    1 用keil打开STM32F407的程序 结果提示下面的问题 就是没有安装固件库 2 然后去keil官网下载对应的固件库 官网地址 https www keil com 然后选中对应的芯片类型 譬如我这个就是STM32F407IGTx 安
  • HttpServletResponse response实现文件上传、下载

    作者简介 哪吒 CSDN2022博客之星Top1 CSDN2021博客之星Top2 多届新星计划导师 博客专家 专注Java硬核干货分享 立志做到Java赛道全网Top N 本文收录于 Java基础教程系列 目前已经700 订阅 CSDN最
  • 2023年三季度中国经济观察

    导读 2023年上半年中国经济同比增长5 5 其中二季度同比增速为6 3 受去年同期低基数影响 较一季度提高1 8个百分点 从环比来看 二季度GDP环比增速为 0 8 较一季度的2 2 明显回落 国内经济修复动能有所放缓 总体来看 随着中国
  • 在vscode中使用Live Server 真机调试

    第一步 安装Live Server 1 在vscode 中搜索 Live Server并安装 2 安装完成之后 鼠标右键单击 html文件 gt 点击 Open with Live Server 3 然后会弹出默认浏览器 并显示页面 可以看
  • vscode如何去除终端启动时显示的多余信息(win11)

    参考链接 https zhuanlan zhihu com p 109788300 在win10中我按照上述链接中的方法操作 成功移除了终端启动时显示的多余信息 现在电脑更新到win11后又出现了如下所示的广告信息 安装最新的 PowerS
  • 2023年最火副业;python爬虫兼职,一周赚7800元,一天只要两小时 !

    前言 大家好 现在学习python的人越来越多了 跟大家简单如何利用python搞副业赚钱的 想要利用 Python 赚钱的方式还是比较多的 其中接单和投稿算是两种比较简单的方式了 如果你是业余学python爬虫 可以去淘宝上加了找了几个店
  • Android内存泄露

    Android内存泄露概述 了解Android内存泄露之前 需要对java的内存管理和GC机制有个简单的了解 Android内存泄露的根本原因是引用者的生命周期大于被引用者 举个例子 有对象A B B有A的强引用 GC要回收A时发现B还未销