Android性能优化之内存优化方法详解

内存,是Android应用的生命线,一旦在内存上出现问题,轻者内存泄漏,重者直接crash,因此一个应用保持健壮,内存这块的工作是持久战,而且从写代码这块就需要注意合理性,所以想要了解内存优化如何去做,要先从基础知识开始。

在开始之前需要先搞明白一个问题,为什么要做内存优化?或者说做内存优化的目的是什么?

为什么要做内存优化?

我们知道,手机的内存是有限的,如果应用内存占用过大,轻则引起卡顿,重则导致应用崩溃或被系统强制杀掉,更严重的情况下会影响应用的留存率。因此,内存优化是性能优化中非常重要的一部分。

目的

做内存优化的目的是降低 Crash 率、让应用运行更流畅、让应用存活时间更长。

Crash 率

Android应用崩溃的原因有很多,内存优化可以帮助我们的应用避免内存问题导致的崩溃内存问题导致崩溃的具体表现就是内存溢出导致的异常OOMOOM的原因有很多,后面会更详细的介绍。

运行更流畅

Android出现界面卡顿的原因有很多,内存问题是其中一个原因内存问题会因为垃圾回收影响界面流畅度(垃圾收集)在GC中,所有线程都应该停止,包括主线程当GC和画图接口操作同时触发时,画图执行会被搁置,导致丢帧,即接口卡住。

存活时间长

Android会根据特定的机制清理进程清理进程时,优先清理后台进程如果某个应用程序在后台运行并占用更多内存,它将首先被清理清理进程的机制是低杀,后面会更详细的介绍。如果用户小张想在我们的电子商务应用程序中购买一个产品,并且在煞费苦心之后找到了一个他喜欢的产品,当他准备购买时,小张 的妻子让他给孩子换尿布当小张再次打开应用时,发现产品页面已经关闭,也就是应用被干掉了,这时小张又想起了孩子的奶粉钱,可能就放弃这次购买了。

用户在移动设备上使用应用的过程中被打断是很常见的,如果我们的应用不能活到用户回来的时候,要用户再次进行操作的体验就会很差。

优化工具

Memory Profiler

Memoryprofiler是Androidstudio自带的一个内存检测工具它通过实时图表显示内存信息,可以识别内存泄漏内存抖动等现象,并可以转储捕获的内存信息、能够执行垃圾收集并跟踪内存分配。

Memory Analyzer (MAT)

比Memory Profiler更强大的Java Heap分析工具,可以准确查找内存泄露以及内存占用情况,还可以生成整体报告,用来分析问题等。

MAT一般用来线下结合Memory Profiler分析问题使用,Memory Profiler可以直观看出内存抖动,然后生成的hdprof文件,通过MAT深入分析及定位内存泄露问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 应用开发中,为了提高应用的性能和内存使用效率,可以采取一些优化方法优化四大组件的内存使用。下面是各个组件的内存优化方法的详细解释: 1. Activity 内存优化: - 使用 `android:launchMode` 属性:根据业务需求合理设置 Activity 的启动模式,避免创建多个相同的 Activity 实例。 - 谨慎使用静态成员变量:避免在 Activity 中使用静态成员变量,因为静态变量会常驻内存,容易导致内存泄漏。 - 及时释放资源:在 `onDestroy()` 方法中释放不再需要的资源,如取消注册广播接收器、关闭数据库连接、停止耗时任务等。 2. Service 内存优化: - 使用启动方式合理的 Service:根据业务需求选择合适的启动方式,如使用 `startService()` 启动后及时调用 `stopSelf()` 或 `stopService()` 停止服务。 - 使用 IntentService:IntentService 是一种自动停止的服务,当任务执行完毕后会自动停止服务,避免忘记手动停止服务。 - 优化线程使用:合理使用线程池来管理线程,避免创建过多的线程,控制线程数量。 3. BroadcastReceiver 内存优化: - 尽早取消注册广播接收器:在不需要接收广播时,及时调用 `unregisterReceiver()` 方法取消注册广播接收器。 - 使用动态注册:根据需要动态注册广播接收器,避免静态注册导致无法及时取消注册。 4. ContentProvider 内存优化: - 懒加载数据:在需要时再去加载数据,避免一次性加载所有数据。 - 使用 CursorLoader:CursorLoader 是一个异步加载数据的工具类,可以在后台线程中加载数据,避免阻塞主线程。 此外,通用的内存优化方法包括: - 避免内存泄漏:合理使用对象的引用,避免对象持有不必要的引用导致内存泄漏。 - 使用资源合理:避免过度使用大量的 Bitmap、Drawable 等资源,及时释放不再使用的资源。 - 使用轻量级的数据结构:选择合适的数据结构来存储和处理数据,避免占用过多的内存。 这些方法可以帮助你优化四大组件的内存使用,提高应用的性能和内存效率。但是需要根据具体的业务需求和场景来选择适合的优化方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值