记一次安卓“Low on memory“崩溃问题

Android APP内存优化 本页面介绍了如何主动减少应用程序中的内存使用量。 有关Android操作系统如何管理内存的信息,请参阅Android内存管理概述 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 监视可用内存和内存使用情况 为响应事件释放内存 分析检查你的app需要用多少内存 使用内存优化框架 监视可用内存和内存使用情况 在修复解决APP 中的内存使用问题之前,首先需要找到它们。 Android Studio中的内存分析器Memory Profiler可以帮助您通过以下方式查找 阅读详情

前言

最近再调人脸识别算法相关demo,发现调试期间总是偶发性崩溃,捕获不到异常的那种,看日志发现原因是Low on memory,一开始还疑惑 App内存不够应该是OOM啊,怎么会出现这种问题,百思不得其解,直到我打开了 Android studio中的Profiler…

开始分析问题

两分零六开始内存直线上升,直到程序被强杀
在这里插入图片描述

在这里插入图片描述

惊呆了烙铁,这TM的不就是内存泄漏吗,于是开始记录内存快照

在这里插入图片描述
emm… Leaks个数为0,没有泄露,啧啧,不用管它,看下面一眼就看到Bitmap 占用了天文数字的Native内存,这明显是Bitmap 没有被回收而一直被强引用啊!

知道问题原因解决起来就简单了,我的程序中因为要不停的向人脸识别算法喂Bitmap,正常的流程是算法处理结束就会及时回收它,巧的是当Bitmap没有人脸的时候中间一段代码会报错,导致算法不能继续执行下去,就导致了这个Bitmap已经通过JNI传进了Native层而无法正常回收,因为算法处理过程是在子线程中,所以即使子线程崩溃,在你不使用try catch捕获异常的情况下,你就无法感知到。

乌鱼子,把相关代码异常处理下就正常了
在这里插入图片描述

最后

不要好奇为什么这么频繁GC,因为不GC我的程序才不正常。最后提醒一下,大家记得处理好子线程异常情况呀,拜拜ヾ(•ω•`)o

Android Low on memory问题 话不多说,先贴上测试提出来的bug 尽管我极力说,这个不算bug,但是人家就是不相信,只好给测试萌妹写一个分析过程了。 这句log在logcat 中的输出如下: 26780 19882 I ActivityManager: Low on memory: 26780 19882 I ActivityManager: ntv ?? 172100: idps_sc (pid 2257) native 26780 19882 I ActivityManager: ntv ?? 34873: 阅读详情

相关推荐

深入解析Android dma_buf机制与Low Memory问题排查

本文深入解析Android系统中的dma_buf机制及其在Low Memory问题排查中的应用。dma_buf作为Linux内核的零拷贝内存共享机制,在图形渲染、多媒体处理等场景发挥关键作用。文章详细介绍了内存泄漏的排查方法、常见问题解决方案及性能优化建议,帮助开发者有效应对Android设备的内存管理挑战。

weixin_29209825的博客 202

android studio 经常卡死问题 The IDE is running low on memory

android studio 经常卡死问题 The IDE is running low on memory

shuangrenlong的博客 2629

别只会看Logcat了!用BugReport揪出Android应用“神秘死亡”的5个关键日志

本文深入解析如何利用Android的BugReport工具精准定位应用崩溃原因,替代传统的Logcat日志分析。通过五大关键日志标记(如am_proc_died、ApplicationExitInfo等),开发者可以系统性地诊断应用被杀的根本原因,包括内存压力、ANR或Native崩溃等场景,并提供实战案例和高级分析工具链。

weixin_30411819的博客 296

Android源码解析(二十五)-->onLowMemory执行流程

上篇文章中我们分析了Activity的onSaveInstanceState方法执行时机,知道了Activity一旦执行了onStop方法就会执行onSaveInstanceState方法,具体的信息,可以参见onSaveInstanceState方法执行时机:http://blog.youkuaiyun.com/qq_23547831/article/details/51464535 这里我们分析一下Act

一片枫叶的专栏 1万+

Android内存优化实战:dma_buf泄漏检测与Low Memory问题定位

本文深入探讨Android内存优化中的dma_buf泄漏检测与Low Memory问题定位。通过分析Lost RAM现象,揭示其与图形缓冲区管理的关系,并提供从调试工具链搭建到泄漏源定位的实战技巧。文章还分享了根治方案和自动化监控体系建设,帮助开发者有效解决内存泄漏问题,提升系统稳定性。

weixin_33698823的博客 314

Android进程被杀全链路分析:从am_proc_died到内存泄漏排查实战

在Android应用开发中,进程管理是保障应用稳定性的核心基础。系统通过Low Memory Killer等机制,在内存资源紧张时依据进程优先级进行回收,以确保前台用户体验。理解这一原理对于优化应用性能、减少崩溃至关重要。从技术价值看,掌握进程生命周期与内存管理机制,能有效提升应用在后台的存活率与响应速度。在实际应用场景中,开发者常面临进程被系统“神秘杀死”的问题,导致用户流失。本文聚焦Android进程消亡分析,通过解读am_proc_died日志与内存快照,结合Low Memory Killer机制,提

weixin_34279246的博客 408

Android Low Memory Killer

先说明一下Linux OOMKiller,再介绍基于此的Android的Low Memory Killer.  Linux底层内核有自己的内存监控机制,即OOMKiller。一旦发现系统的可用内存达到临界值,他就会跳出来,按照一定的策略,杀进程,回收内存。   进程在LINUX系统中,会有一个权重值,这个权重值存储在/proc//oom_adj,系统会根据该值,同时考虑一些其他因素(

码农刚sama的程序人生 2386

从Android内存回收机制看APP生命周期管理的艺术

本文深入探讨了Android内存回收机制及其对APP生命周期管理的影响,揭示了系统如何通过OOM Killer和Low Memory Killer策略动态管理内存。文章重点分析了Application类在内存回收中的陷阱,并提供了避免APP崩溃的实用解决方案,如进程冷冻技术和低端设备优化策略,帮助开发者提升应用性能和用户体验。

weixin_29248611的博客 602

手游内存崩溃风险线完全指南

内存超限是手游最常见的崩溃原因之一。以下是各系统的与。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 2577

Andriod Low on memory 打印原理分析

变量 ionHeap 获取的是/sys/kernel/ion/total_heaps_kb 节点信息; 变量 ionPool 获取的是/sys/kernel/ion/total_pools_kb 节点信息; 两者相加就是 ION 使用的内存。 其中IApplicationThread thread是在ActivityThread中创建的此时属于新建的进程(比如新建app的进程)。client就是ApplicationThreadProxy对象,这个对象是在AMS中,

私房菜 4996

安卓内存OOM问题深度分析与实战解决方案

Android内存管理建立在Linux内核基础之上,采用多层次架构设计。系统从下至上分为Linux内核层、运行时层(ART)与应用层,各层协同完成内存分配、回收与优化。内核通过页框分配器管理物理内存,而ART虚拟机则负责Java对象的堆内存分配与垃圾回收。应用进程由Zygote孵化,继承预加载类与资源,减少启动开销,但共享内存也增加了泄漏传播风险。该分层模型兼顾性能与隔离性,是理解OOM与内存泄露的前提。

weixin_36282234的博客 1284

Android 源码编译踩坑记:dex2oatd mmap 失败与 low 4GB 地址空间

Android源码编译低地址空间分配失败问题分析 本文分析了在Android源码编译过程中遇到的dex2oatd阶段崩溃问题。尽管物理内存充足,构建仍因low_4gb地址空间分配失败而报错"Can't allocate memory"。关键发现是: 问题本质是32位目标编译时,ART需要低4GB连续地址空间,但ASLR导致分配失败 使用gdb调试时问题消失,因为gdb环境改变了地址空间布局 最佳解决方案是使用setarch x86_64 -R临时关闭ASLR运行构建命令 其他可选方案包括

weixin_46759000的博客 865

CentOS 7下rsyslog日志服务器搭建全攻略:从安装到避坑

本文详细介绍了在CentOS 7系统上搭建rsyslog日志服务器的完整流程,从基础安装到高级配置,包括协议设置、日志模板设计、安全加固和性能优化。特别分享了生产环境中的实战技巧和常见问题解决方案,帮助用户高效构建可靠的日志管理系统。

happy2的博客 687

Android进程被杀问题深度解析:从系统机制到排查实战

在Android开发中,进程生命周期管理与内存优化是保障应用稳定性的核心基础。系统通过Low Memory Killer(LMK)等机制,在内存资源紧张时依据进程优先级(OOM Adj值)进行资源回收,以平衡性能与功耗。理解这一原理对开发高性能应用至关重要,尤其在后台任务处理、内存泄漏防范等场景。本文聚焦Android进程被系统终止这一常见但隐蔽的问题,通过解析logcat、dmesg等系统日志,结合内存监控工具,提供一套从定性判断到定量分析的完整排查框架。针对后台服务策略优化与厂商定制系统差异等实践难点,

weixin_34290631的博客 461

基于 Langchain 开发一个完整的支持多轮数据分析(直连 mysql 数据,多表综合分析 SQL 取数,数据分析,报表生成)ChatBI 系统(前后端完整实现源代码)

ChatBI系统开发摘要 本文介绍了基于Langchain的多轮数据分析ChatBI系统开发方案。该系统支持MySQL数据库连接,提供多表分析、SQL查询、数据分析和报表生成功能。系统采用前后端分离架构:前端使用React+Ant Design+ECharts实现交互界面;后端基于FastAPI搭建服务,集成Langchain处理自然语言到SQL的转换;核心技术栈还包括SQLAlchemy、Pandas和Matplotlib。 系统核心模块包括: 数据库连接层:使用SQLAlchemy管理MySQL连接 L

AI天才研究院 812

亲测解决This application failed to start because no Qt platform plugin could be initialized.

这个问题是由于环境变量改变或者Qt的路径改变导致,解决办法是在环境变量里面重新添加Qt路径。

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 2919

android的oomkiller_Android Low Memory Killer

LMK简介Linux的内存的使用原则就是不要浪费内存,所以在程序退出时在一段时间内还停留在内存中,这也是我们下一次打开程序时发现快一些的原因。但是这样带来的坏处就是如果驻留在内存中的程序多了,容易导致OOM(out of memory)的可能。Linux中使用内存监控机制来避免OOM发生。OOM KillerLinux原本存在一个内存监控机制OOM Killer,一旦发现内存使用进入一个临界值就会...

weixin_34005090的博客 457

Python进阶005:修改Jupyter Notebook的工作路径

1、Jupyter Notebook简介 2、修改Jupyter Notebook的工作路径 如下三个步骤: 一、安装notebook 在CMD命令行中输入: pip install notebook 二、启动notebook jupyter notebook 启动后发现是在你的用户目录下,如下图所示,但是该目录下有很多的其他文件或文件夹,因此我想把这个环境切换到我单门创建的一个文件夹中。 三、创建notebook的配置文件 在CMD命令行中执行: jupyter notebook --genera

若北辰 1384

low memory killer的触发

low memory killer究竟是怎么执行起来的呢?不难猜测...

weixin_33862993的博客 1134

在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量

摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1044

【WRF安装】WRF环境配置移植详细说明

【WRF安装】WRF环境配置移植详细说明

WW、forever的博客 819

linux内核如何修改lowmem,技术内幕:Android对Linux内核的增强 Low Memory Killer

6 09 2013技术内幕:Android对Linux内核的增强 Low Memory KillerLow Memory Killer(低内存管理)对于PC来说,内存是 至关重要。如果某个程序发生了内存泄漏,那么一般情况下系统就会将其进程Kill掉。Linux中使用一种名称为OOM(Out Of Memory,内存不足)的机制来完成这个任务,该机制会在系统内存不足的情况下,选择一个进程并将其Kil...

weixin_39743414的博客 318

DICOM图像知识:深入详解DICOM的层级关系

解析DICOM的四个主要层级:Patient(患者)、Study(检查)、Series(序列)和SOP(服务-对象对),探讨它们之间的关系、各自的唯一标识符以及在实际应用中的用途

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 3304

android因为memory low杀掉的activity 会不会再restore出来?

============问题描述============ android外行人,问个问题 activity不是在栈里管理嘛、那是不是memorylow的时候,先从栈底开始杀?(有没有杀的优先级?) 栈底下的被杀时候,当出栈到这个被杀的activity时,会发生什么? ...

weixin_30251829的博客 120

iOS远程真机之ios-minicap安装使用完全指南

minicap 是开源项目 STF 中的高速截图工具。STF利用此工具不断的传输图片信息并在web端绘制实现 以前只有Android版本,最近有新的ios版本,现在就安装过程中遇到的一些问题进行分享(ps:感谢sorccu 在issue里面给我的指点) 首先上地址:https://github.com/openstf/ios-minicap 你可以git clone或者直接下载zip包。

甫式人生 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Unity 之 Android Logcat实战:从设备连接到符号表解析疑难排查

本文详细介绍了如何使用Android Logcat工具进行Unity安卓开发的调试与疑难排查。从设备连接到符号表解析,涵盖了环境配置、日志分析、性能问题定位等实战技巧,帮助开发者高效解决原生层崩溃和系统级错误,提升应用稳定性。

weixin_33968104的博客 415

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 一个用Kotlin编写简易的串行任务调度器
下一篇: 在Android中解析XML文件并在RecyclerView中显示
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值