首页 > 编程知识 正文

Android 内存浪费,android弱网优化

时间:2023-05-05 00:47:52 阅读:125826 作者:838

文章系列安卓性能优化总结-概述安卓性能优化总结- APK瘦身优化安卓性能优化总结-启动速度优化安卓性能优化总结-稳定性优化安卓性能优化总结-内存优化安卓性能优化内存始终有限,分配给所有APP应用程序的内存也有限,需要优化所有内存。 否则,此时将出现崩溃,因为APP应用程序没有足够的内存。

如果内存在哪里使用和优化,就需要知道内存在哪里使用。 通过对内存消耗较多的场景进行优化,并进行对症治疗,可以取得良好的优化效果。

Android Studio效能分析工具是一个有用的工具,可让您使用内部记忆体工具即时监控APP执行期间的记忆体配置。

dump APP内存堆栈后,还可以查看各级占用的内存情况。

可以显示每个对象的详细信息。

有关如何使用Android Studio中的性能分析工具的具体教程,请参见官方教程。 这里不详细说明。

要成功使用上述方法并找到内存密集型场景,必须进行优化。 主要方法是寻找减少特定场景中内存使用的方法。 就我个人而言,我总结了平时可能会做的优化。

与图像相关的优化图像是我现在制作的APP应用程序中消耗内存的部分,面临着一些问题。 我主要用以下方法进行优化。

不加载暂时不能使用的图像。 例如,有一张网络加载异常的图。 不要从一开始就初始化,到真正有异常需要展示的时候再初始化加载的图像时,尽量加载指定大小的图像。 因为控件的大小可能小于实际图像大小,所以此时会浪费内存。 如果需要,可以在后台返回不同大小的图像。 对于因图像格式而不可见的图像,请考虑先发布。 毫无疑问,要尽可能少地创建对象。 如果对象少,内存也一定很少。 平时要注意哪些事情?

自定义view时,不要经常在onDraw方法中创建对象。 由于onDraw方法可能会频繁调用,因此此时会创建大量对象。 由此在浪费的同时,gc触发的频率变高,成为纸箱。 请尽量减少线程的创建。 创建线程实际上是消耗资源。 创建空线程将消耗约1-2 M的内存。 同时,异步任务将立即执行。 如果频繁创建线程以执行异步任务,则不仅内存占用大量,而且GC还可能导致卡顿。 执行异步任务时,建议在线程池中运行,但要注意线程池的使用。 尽量用StringBuilder或StringBuffer连接字符串。 平时发现的问题主要是在打印logcat时和连接后台返回的数据时生成大量的字符串,如果有类似的情况,也可以考虑进行优化。 内存泄漏是指应该释放的内存,由于某种原因保留在GC ROOT对象中,在GC时不会释放。 这可能会导致重复操作导致APP没有足够的内存,到时候系统可能会杀死APP。 所以,内存泄漏需要排除故障。

监视分析存储器泄漏问题方面的总结是因为,上述是存储器泄漏的总结,部分GC ROOT对象具有希望释放的对象,因此希望释放的存储器不能立即释放。 因此,如何监视和分析内存泄漏问题成为如何找到GC ROOT的问题。

典型的手动分析过程是重复操作怀疑内存泄漏的场景,然后触发GC几次。 等待几秒钟,然后按下APP内存堆栈(可以使用as中的工具进行dump ),使用sdk中的cover工具进行转换,并使用MAT工具分析内存泄漏对象对GC ROOT的引用链。

手动分析总是很麻烦。 幸运的是,有一个特别有用的工具可以自动监视和分析内存泄漏。 该工具是leakcanary,它自动监视和提供从内存泄漏对象到GC ROOT的引用链。

很容易使用。 只需添加到APP的build.gradle下

dependencies {//debugimplementationbecauseleakcanaryshouldonlyrunindebugbuilds.debugimplementation ' com.square up.Leary

创建弱引用时,可以指定参考队列。 如果弱参照引用的对象的可达性发生变化,则系统会将此弱参照引用的对象放置在先前指定的参考队列中等待处理。

因此,GC后引用对象仍未出现在RefrenceQueue中时,表示可能发生了内存泄漏。 此时,leakcanary对APP的heap进行dump,在shark库中分析heap,找到对GC ROOT的最短参照链进行提示。

我个人总结了常见内存泄漏的场景,记录了工作中遇到内存泄漏的场景。 请作为参考。

静态变量具有Context等。 每个实例都有上下文等。 一些回调没有反向注册,如广播注册或反向注册。 在某些情况下,第三方库也需要注意。 有些监听器没有手动断开连接。 匿名内部类保存外部类的实例。 例如,在使用常见匿名内部类(如Handler和Runnable )的实现中,可能会不小心拥有外部类实例(如Context )。 请联系github :https://github.com/Xander Wang

邮件:420640763@QQ.com

blog :3359 Xander _ Wang.gitee.io/Android-note /

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。