玩安卓必须要掌握的性能优化之内存优化

简介: 玩安卓必须要掌握的性能优化之内存优化

前言

这是我写的性能优化的第三篇文章,下面是另外两篇文章:

玩安卓必须要掌握的性能优化之内存泄漏

玩安卓必须要掌握的性能优化之APK极限压缩

正文

本篇文章准备详细说一下编码中需要注意的地方,养成良好的编码习惯。

第一点 数据类型

尽量不要使用比需求更占空间的基本数据类型,比如能用 int 就不使用 long,能用 float 就不使用 double,可以减少内存的开销,虽然几乎对程序产生不了太大影响,但是还是要尽量避免。

还有就是自动装箱尽量少用。

第二点 循环

循环尽量使用增强for循环(for each),少用迭代器(iterator)

第三点 数据结构与算法

这一点是最重要的,但也是最难的,其实也不难,关键看能不能坚持下来。每天看一道算法题,半年基本上就能提升非常大的一截。数组、链表、树、栈、图。。。。

还有一点是咱们经常使用的HashMap,写的时候非常自然,直接就写出来了,但是占用内存较大,Android官方为安卓开发者提供了SparseArray(key为整数),当数据量在千级以下可以使用,它的性能虽然不如HashMap但节约内存;千级以上还是使用我们熟悉的HashMap吧。

第四点 枚举优化

曾几何时,因为安卓官方二点几的一句话(图在下方),几乎所有的安卓性能优化中都会有这么一句,但我想说的是,随着硬件的提升,之后的官方文档中早已经找不见这句话了

20200224221253162.png

虽然说现在可以用枚举,但是性能优化嘛,本来也就是鸡蛋里挑骨头,咱们可以将枚举替换成常量,并用注解进行个数的限制。下面是代码样例:

public class Constants {
    public static final String TYPE_A = "1";
    public static final String TYPE_B = "2";
    public static final String TYPE_C = "3";
    public static final int TYPEDES_A = 1;
    public static final int TYPEDES_B = 2;
    public static final int TYPEDES_C = 3;
}
//String类型的注解 @StringDef() 
@StringDef({Constants.TYPE_A,Constants.TYPE_B,Constants.TYPE_C})
public @interface FieldMata {
}
//int类型的注解
@IntDef({Constants.TYPEDES_A,Constants.TYPEDES_B,Constants.TYPEDES_C})
public @interface TypeDes {
}

代码很简单,使用也不难,下面是使用样例:

//在需要限定的方法内的参数写上先前定义的限定值
    private void printType(@FieldMata String type) {
        System.out.println(type);
    }
    private void printType(@TypeDes int des) {
        System.out.println(des);
    }
    public static void main(String[] args) {
        DemoTest demoTest = new DemoTest();
        demoTest.printType(Constants.TYPE_A);
        demoTest.printType(Constants.TYPEDES_A);
    }

第五点 static   static final的问题

static会由编译器调用clinit方法进行初始化

static final不需要进行初始化工作,打包在dex文件中可以直接调用,并不会在类初始化申请内存

所以基本数据类型的成员,可以全写成static final

第六点 字符串的连接尽量少用加号(+)

这一点大家可能听的耳朵都起茧了,但是不得不说,几次拼接可能无所谓,但是千万不要在循环中还使用加号进行拼接,对内存的消耗真的挺大,尽量还是使用StringBuffer和StringBuilder吧。

第七点 重复申请内存问题

尽量不要在同一个方法多次调用,如递归函数 ,回调函数中new对象,读流直接在循环中new对象等

也不要在onMeause() 、onLayout()、onDraw()  中去刷新UI(requestLayout)

第八点 避免GC回收将来要重用的对象

比如咱们最常用的图片加载框架Glide,它就做的非常好,既实现了LifeCycle,还使用Lru算法,还有三级缓存,这样大大避免了GC回收需要重复使用的图片,可以参考Glide源码的实现。

第九点 尽量使用IntentService,而不是Service

原因很简单,IntentService是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题。

第十点 Activity组件泄漏

非业务需要不要把activity的上下文做参数传递,可以传递application的上下文

千万不要把和Activity有关联的对象写成static   如private static Button btn;   private static Drawable drawable;除了调用比较方便,没有一点好处

非静态内部类和匿名内部内会持有activity引用。比如咱们经常写的回调接口,不要使用匿名内部类来实现,尽量使用实现接口的方式来实现,在接收的使用也尽量不要接收Activity,最好使用弱引用(WeakReference),但是别忘了在使用前要进行判空

单例模式持有activity引用,这里也是,如果需要Activity尽量使用弱引用

handler.postDelayed(),如果开启的线程需要传入参数,用弱引接收可解决问题。还有就是handler记得清除removeCallbacksAndMessages(null)

总结

其实上面所说的只是很多编码习惯中比较重要的一些,当然还有很多没有列举出来。


目录
相关文章
|
14天前
|
缓存 监控 Android开发
安卓应用性能优化的实用策略
【4月更文挑战第2天】 在竞争激烈的应用市场中,一款应用的性能直接影响用户体验和市场表现。本文针对安卓平台,深入探讨了性能优化的关键要素,包括内存管理、代码效率、UI渲染和电池使用效率。通过分析常见的性能瓶颈,并提供针对性的解决策略,旨在帮助开发者构建更加流畅、高效的安卓应用。
|
29天前
|
传感器 API Android开发
构建高效的安卓应用:从内存优化到电池续航
【2月更文挑战第27天】 随着智能手机成为我们日常生活中不可或缺的一部分,用户对应用程序的性能和效率要求越来越高。对于安卓开发者来说,优化应用的内存使用和延长电池寿命已经成为提升用户体验的关键任务。本文将深入探讨在安卓开发中如何通过有效的内存管理和电池使用策略来构建一个高效且持久的应用。我们将分析常见的内存泄漏问题,讨论如何利用安卓的电池管理API以及探索最新的安卓系统特性,帮助开发者们提升应用性能,并确保它们能在资源受限的设备上顺畅运行。
|
3月前
|
Java 调度 数据库
Android 性能优化: 如何进行多线程编程以提高应用性能?
Android 性能优化: 如何进行多线程编程以提高应用性能?
46 0
|
6月前
|
SQL 人工智能 算法
Android性能优化之应用瘦身(APK瘦身)
Android性能优化之应用瘦身(APK瘦身)
|
8天前
|
监控 API Android开发
构建高效安卓应用:探究Android 12中的新特性与性能优化
【4月更文挑战第8天】 在本文中,我们将深入探讨Android 12版本引入的几项关键技术及其对安卓应用性能提升的影响。不同于通常的功能介绍,我们专注于实际应用场景下的性能调优实践,以及开发者如何利用这些新特性来提高应用的响应速度和用户体验。文章将通过分析内存管理、应用启动时间、以及新的API等方面,为读者提供具体的技术实现路径和代码示例。
|
23天前
|
缓存 前端开发 Android开发
构建高效Android应用:从设计原则到性能优化
随着移动设备成为我们日常生活不可或缺的一部分,开发一个流畅且响应迅速的Android应用变得至关重要。本文将探讨如何通过遵循Android设计原则和实施细致的性能优化策略来构建高效的Android应用程序。我们将深入分析应用架构的选择、内存管理的要点以及UI设计的优化,旨在为开发人员提供一套实用的指导方针,帮助他们提升应用的整体性能和用户体验。
|
26天前
|
监控 Java Android开发
构建高效Android应用:从内存管理到性能优化
【2月更文挑战第30天】 在移动开发领域,打造一个流畅且响应迅速的Android应用是每个开发者追求的目标。本文将深入探讨如何通过有效的内存管理和细致的性能调优来提升应用效率。我们将从分析内存泄露的根本原因出发,讨论垃圾回收机制,并探索多种内存优化策略。接着,文中将介绍多线程编程的最佳实践和UI渲染的关键技巧。最后,我们将通过一系列实用的性能测试工具和方法,帮助开发者监控、定位并解决性能瓶颈。这些技术的综合运用,将指导读者构建出更快速、更稳定、用户体验更佳的Android应用。
|
26天前
|
监控 算法 Android开发
安卓应用开发中的内存优化策略
【2月更文挑战第30天】随着移动设备性能的不断提升,用户对应用程序的体验要求越来越高。在安卓应用开发中,内存管理是影响应用性能和用户体验的关键因素之一。本文将探讨针对安卓平台的内存优化技巧,包括避免内存泄漏、合理使用数据结构和算法、优化图片资源处理等策略,旨在帮助开发者提升应用性能和稳定性。
19 1
|
1月前
|
设计模式 缓存 Android开发
深入理解Android应用性能优化
【2月更文挑战第18天】在移动开发领域,应用性能是用户体验的关键因素之一。特别是对于安卓设备而言,由于硬件配置的多样性,确保应用在不同设备上都能流畅运行是一项挑战。本文将探讨Android应用的性能优化策略,包括内存管理、UI渲染、多线程处理以及电池效率等方面。通过实例和最佳实践,我们将展示如何诊断性能瓶颈,并提供解决方案来改善应用响应速度和稳定性。
|
3月前
|
存储 缓存 编解码
Android 性能优化: 解释Bitmap的优化策略。
Android 性能优化: 解释Bitmap的优化策略。
39 1