Android中常见的内存优化及内存泄露场景

news2024/11/17 13:58:15

避免内存泄露的关键是及时释放不再需要的资源,特别是生命周期较长的资源。在Activity和Fragment的生命周期方法中释放这些资源,如onDestroy()方法中释放线程、集合等引用,避免这些资源的生命周期过长导致内存泄露。

Android内存优化主要有以下几个方面:

  1. 合理设置应用的minSdkVersion和targetSdkVersion,使应用可以运行在更多设备上,这可以提高内存利用效率。
  2. 避免在Application和Activity的onCreate方法中做过多工作,这会占用过多内存。可以将不必要的初始化工作放到onStart或延迟加载。
  3. 避免在UI线程中进行过多工作,可以使用AsyncTask或者Thread执行耗时操作,避免ANR问题发生。
  4. 重用已有对象,避免重复创建对象,这会产生大量垃圾对象,增加GC负担。可以使用对象池技术重用对象。
  5. 优化布局,减少视图层级,可以通过merge标签减少不必要的ViewGroup。过多View会增加内存占用。
  6. 避免使用过多大图,可以加载合适大小的图片,并使用图片缓存技术,只在列表滑动到可视区域时才加载图片,这可以减少不必要的图片内存占用。
  7. 监测和分析内存使用情况,可以使用ADB的dumpsys meminfo命令查看应用内存使用,并根据报告查找内存占比较大的模块进行优化。也可以使用LeakCanary等内存泄露检测工具监测内存泄露情况。
  8. 及时释放资源,在Activity和Fragment的onDestroy方法中及时释放资源,避免长期占用内存。对Bitmap等资源调用recycle方法进行回收。
  9. 将数据存储在SQLite数据库中,而不是将大量对象存储在内存中,这可以大大减少内存占用。但也要注意数据库本身也会占用一定内存。
  10. 优化自定义View,自定义View也要遵循上述内存优化原则,尽量重用资源,减少创建对象的次数等。

Android开发中容易造成内存泄露的场景主要有:

  1. 静态变量持有Activity实例。这会使Activity无法被回收,导致内存泄露。应避免静态变量持有Activity实例的引用。
  2. 非静态内部类持有外部类实例。非静态内部类会隐式持有外部类的引用,这也会导致外部类无法回收。应避免非静态内部类,或显式使内部类的引用为弱引用。
  3. 线程运行时未释放资源。如果线程运行过程中创建了对象但未及时释放,当线程结束后这些对象也无法被回收,导致内存泄露。应在线程结束前释放所有资源。
  4. 集合中保留了不再需要的对象引用。如果集合中保留了不再需要的对象引用,这些对象也无法被回收,应及时从集合中移除不需要的对象引用。
  5. 未调用Bitmap的recycle()方法。Bitmap是占用内存较大的对象,如果未调用recycle()释放,会造成较大的内存泄露。应在Bitmap不再需要时调用recycle()方法进行回收。
  6. 注册了广播接收器但未 unregister。注册后的广播接收器会持有注册者的引用,如果未调用unregister注销,该引用也无法被回收。应在需要时注册,不需要时注销广播接收器。
  7. WebView未removeJavascriptInterface或释放。WebView也是较占内存的组件,如果长期保留WebView实例会导致内存泄露,应在WebView不需要时removeJavascriptInterface并销毁WebView。

性能优化对于Android开发的重要性非常大。随着Android设备的不断升级,用户对应用的要求也越来越高,包括应用的运行速度、响应速度、流畅度等方面。如果应用的性能不能满足用户的需求,很可能会导致用户流失、差评以及应用被卸载等情况。

另外,随着移动互联网的普及和应用市场的竞争越来越激烈,开发人员需要尽可能地提高应用的性能,以提高用户的使用体验和满意度。同时,在性能方面的优化还可以减少应用的资源占用和耗电量,也可以为用户节省设备存储空间和流量消耗。

因此一些公司在招聘栏中就有明确的说明:
在这里插入图片描述
这里也为大家准备了《Android 性能优化的核心笔记》 如有需要 点击此处免费领取获取,里面记录的有启动优化、、内存优化、网络优化、崩溃优化、UI渲染与卡顿优化、图片加载优化、性能监控……等,算是比较全面的知识点手册了,值得你去收藏参考学习。
在这里插入图片描述
部分笔记展示:

内存优化

内存优化是指优化 Android 应用程序的内存使用,以减少可用内存的消耗,提高应用程序的性能和可靠性。Android 内存优化可以通过减少内存使用量,减少对资源的消耗,以及提高内存利用率来实现。

  • 内存抖动和内存泄漏
  • 内存大户,Bitmap 内存优化
  • Profile 内存监测工具
  • Mat 大对象与泄漏检测

启动优化

Android启动优化是指通过优化应用程序的启动过程,使其在启动时更快地响应用户的操作。

网端存在的一个定律叫8秒定律:即指用户访问一个网站时,如果等待打开的时间超过8秒,超过70% 的用户将会放弃等待。
同样的,移动端也有一个8秒定律:如果一个App的启动时间超过8秒或有明显的卡顿,80%的用户将会退出应用并对程序员进行口吐芬芳。当然这是我瞎编的,但却不代表是不存在的。最起码肯定会影响App在市场上的评分,进而让更多的用户在对比过程中选择竞品。

  • 冷启动和热启动解析
  • APP启动黑白屏解决办法
  • 启动速度与执行效率优

网络优化

Android应用为什么需要考虑网络优化,主要基于以下几个原因:

  1. 流量:App的移动网络流量消耗对用户来说是比较敏感的;
  2. 电量:网络请求对电量的消耗是比较大的,影响手机的待机时间;
  3. 用户体验:网络请求是耗时操作,如果App请求等待时间长,会给用户网络卡, 应用反应慢的感觉。

网络请求优化的目的是尽可能的减少用户等待的时间、减少用户的流量使用、减少对手机电量的消耗,最终达到提升用户体验。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/517786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

身为企业管理者,必须了解的财务知识

财务管理工作是企业管理工作中的核心内容,也是企业管理工作中的难点内容,对于集团企业来讲更是任务艰巨而又问题频出。然而,信息时代的来临为解决和完善企业财务管理问题提供了新思路,就集团企业而言,财务管理信息化基…

如何解决人力资本管理挑战?

人力资本管理(HCM)是任何企业成功的一个重要因素。得益于高效、多产和敬业的员工队伍,在此领域找到正确的方法和策略可以推动您取得更大的成果。 但是,除了关注HCM的好处和机会之外,你还需要做好准备,以克…

PCB多层板 : 磁通对消法有效控制EMC

在PCB的EMC设计考虑中,首先涉及的便是层的设置;单板的层数由电源、地的层数和信号层数组成;在产品的EMC设计中,除了元器件的选择和电路设计之外,良好的PCB设计也是一个非常重要的因素。 PCB的EMC设计的关键&#xff0…

初阶数据结构——链表习题

目录 如何快速调试链表习题链表习题移除链表元素链表的中间节点反转链表链表中倒数第k个结点合并两个有序链表链表分割链表的回文结构相交链表环形链表slow和fast一定会相遇吗?如果fast一次走(3、4、5)步呢? 环形链表 Ⅱ思路1:推论思路2&…

数字化时代,探寻BI本质与发展趋势

可能和很多人想象的不同,商业智能BI虽然是信息化、数字化领域内的重要的数据类技术解决方案,但是商业智能BI并不是在当前时代突然冒出来的新应用,而是经过数十年积累的成熟产品。 早在1958年,IBM研究员就将商业智能BI的早期形态定…

计算卸载-论文02-计算资源差分定价

标题:《Differential Pricing-based Task Offloading for Delay-Sensitive IoT Applications in Mobile Edge Computing System》 期刊: IEEE Internet of Things Journal,2022 一、梳理 问题:在计算卸载许多场景中&#xff0c…

低代码平台:10分钟从入门到原理

导航目录 一、低代码概念 二、优势及局限 三、基础功能及搭建 1、业务流程 2、用户权限 3、统计图表 四、使用感受 五、总结 传统的软件研发方式目前并不能很好地满足企业的需求:人员成本高、研发时间长、运维复杂。这时低代码工具的出现为快速开发软件提供…

智慧校园平台源码 智慧班牌源码 人脸识别技术 电子班牌源码 家校互联小程序源码

智慧校园平台源码 智慧班牌源码 人脸识别技术 电子班牌源码 家校互联小程序源码 源码开发环境:Javaspringbootvueelement-uimysql 智慧校园系统定位于中小学教育学校,侧重实际应用,讲究实际,突出加强校园安全监管,德…

冗余-安全设计的基石

冗余构成原理就是在系统中采用2套中央处理器(CPU)单元,其中1套为工作主机,1套为热备,一旦工作主机发生故障,热备的CPU将自动投入工作,此时热备的CPU变为工作主机,原工作主机故障处理…

五月份了,让我看看有多少金三银四没找到工作的.....

前两天跟朋友感慨,去年的铜九铁十、裁员、疫情导致好多人都没拿到offer!现在都已经5月了,金三银四都结束一段时间了。 金三银四都已经结束,大部分企业也招到了自己需要的人,但是我看我的读者们还是有很大一部分人在抱…

GEE:设置下载数据的Nodata值,并在ArcGIS中将空值设置为空

作者:CSDN @ _养乐多_ Google Earth Engine(GEE)是一个功能强大的云平台,用于进行地理空间数据处理和分析。它提供了丰富的数据集和工具,使得在研究和应用中使用遥感数据变得更加便捷。本文将介绍如何使用GEE设置下载的数据的Nodata值,并在ArcGIS软件中将空值设置为空,…

Golang笔记:使用标准库中os.Args和flag包编写命令行界面(CLIs)

文章目录 目的os.ArgsflagFlagSet总结 目的 命令行界面(Command-line Interfaces)是比较常用的一种软件形式。对于大部分开发运维人员来说很多时候CLIs可能比图形界面更加方便。软件开发时也经常会有需要开发命令行界面形式软件的情况,使用G…

栈和队列:理解与使用

目录 栈 顺序栈结构 链式栈结构 中缀表达式和后缀表达式 顺序栈四则运算 链式栈四则运算 队列 顺序队列结构 链式队列结构 总结 栈和队列是计算机科学中常见的数据结构,它们都是一种线性数据结构,可以对元素进行快速的插入、删除和查找操作。栈…

00后工资太低,现在转行数据分析还能就业吗?,求大佬指点!

当然可以就业,只要专业技能过关。IT是靠技术吃饭的行业,没有复杂的人际关系和面子工程,相对其他行业要纯粹一些。当然,如果你技术不过关,或者跟不上技术更新发展速度,淘汰也是必然的,IT行业不能…

听我一句劝,千万别去外包,两年外包生涯做完,感觉自己废了一半....

先说一下自己的情况。大专生,18年通过校招进入湖南某软件公司,干了接近5年的点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的功能测试…

前端开发和测试的新伙伴:Requestly,让你事半功倍!

目录 引言 痛点 前端测试 后端测试 曾使用的应对措施 Charles Chrome 插件 实现mock工具 Requestly Requestly的功能 流量捕捉方式 请求的修改 响应的修改 请求响应录制 我对Requestly的应用 总结 引言 想必每个前端开发和测试的小伙伴都曾经历过不断地切换页…

CV界的chatgpt出现——Segment Anything能分割万物

目录 一、前言(1)弱人工智能(Weak AI)(2)强人工智能(General AI)(3)超人工智能(Super AI) 二、SAM的一些介绍2.1 模型的结构是什么&am…

React动态路由配置

目录 项目初始化 模块创建 统一导出 全局模块配置选项 核心代码 使用及效果展示 博文适用于react-router v6及以上,其中还有很多值得改进的地方 最近学习react的过程中,思考怎样实现动态路由的配置(最终实现从页面配置最终动态从数据库加载上线模…

C++解析JSON JSONCPP库的使用

首先去GitHub下载JSONCPP的源码: JSonCpp的源码 解压后得到:jsoncpp-master 文件夹 需要的是:jsoncpp-master\src\lib_json 目录下的所有文件和 jsoncpp-master\include\json 目录下的所有文件,在MFC工程目录下新建两个文件夹或…

承诺协议:定义 构造

文章目录 安全性定义方案构造基于 OWP 存在性基于 DL 假设基于 OWF 存在性基于 DDH 假设 总结 安全性定义 承诺协议(Commitment Scheme)是一个两阶段的两方协议。一方是承诺者(Committer) C C C,另一方是接收者&#…