Android 高级进阶-代码优化笔记

作者: d74f37143a31 | 来源:发表于2019-01-15 21:30 被阅读19次

    编写高效的代码是一个合格程序员的追求。

    根据 Android 官方的建议,编写高效代码的两个基本准则如下:

    1. 不要做冗余的工作
    2. 尽量避免次数过多的内存分配操作

    数据结构的选择
    正确的选择合适的数据结构是很重要的,对Java 中常见的数据结构例如:ArrayList、LinkedList、HashMap、HashSet 等需要对他们的联系与区别有较深入的理解。

    Android 开发中提供了一个更高效的数据结构用于替代 HashMap,那就是 SparseArray。它是 Integer 到 Object 的一个映射。

    使用 SparseArray 需要注意:

    1. SparseArray不是线程安全的,也就是在多线程并发操作可能会出现问题。
    2. 由于使用了二分查找,因此,SparseArray 会对插入的数据按照 Key 值得大小顺序插入
    3. SparseArray 对删除操作做了优化它并不会立即删除这个元素,而是设置标志位(DELETED)的范式,后面尝试重用

    Handler和内部类的正确使用
    Handler 的不当使用会导致内存泄露,在内存泄露堆积到app所能承载的最能内存之后会内存溢出,也就是 Android 中常见的 OOM。

    内存泄露原因是长生命周期的对象一直持有短声明周期对象的引用。常见的 Handler内存泄露是非静态内部类 Handler 持有 Activity 对象的引用。

    解决办法是使用静态内部 Handler 类,然后通过软引用来引用 Activity 对象。

    **正确使用 Context **
    Context表示的是上下文关系。

    单例 Context 导致的内存泄露问题,可使用 Application Context 替代,或者使用软引用

    Java 的四种引用方式(可参考著名的 LeakCanary 源码分析)
    强引用:常见的对象引用关系都是强引用
    软引用:在内存不足时,垃圾回收期才会回收该对象
    弱引用:垃圾回收器只要扫描到弱引用的对象就会回收
    虚引用:不对对象的生命周期产生影响,起标记作用

    其他优化

    1. 避免创建重复的对象
    2. 对常量使用 static final 修饰
    3. 避免内部的 Getting/Setting
    4. 代码的重构

    相关文章

      网友评论

        本文标题:Android 高级进阶-代码优化笔记

        本文链接:https://www.haomeiwen.com/subject/tkrrdqtx.html