• 安卓APP优化归档


    1.APP启动速度。

    主要是冷启动和热启动的启动速度,通过在application入口减少耗时的操作来进行优化。

    参考文章: 启动优化1
    启动优化2

    2.UI

    去除不必要的android:background属性来减少Overdraw ,使用Hierarchy Viewer来减少层次结构.有4个比较特别的标签是非常重要:viewStub,requestFocus,merge和include,其中3个与资源复用有关。

    viewStub直观效果类似于View的不可见性,但其所包裹的View在默认状态下不会占用任何内存空间。viewStub通过include从外部导入View元素。用法:通过属性android:layout来设定内容。

    include 用于直接加载xml,是复用UI资源的常用标签。用法:通过属性layout来设定加载的xml。

    requestFocus 用于设定焦点。用法:将requestFocus放于View标签中。

    merge 目的:删减多余或额外的层级。

    如果你创建的Layout不是把FrameLayout当作根节点,就不能使用merge来优化。

    当使用include或viewStub从外部导入xml结构时,可以将被导入的xml用merge作为根节点,这样当被嵌入后可以很好地融合,不会出现冗余的节点。

    只可以作为xml-layout的根节点。扩充的xml-layout是merge作为根节点时,需要将被导入的xml-layout置于viewGroup中,同时需要设置attachToRoot为true。

    参考文章: ui优化1
    ui优化2
    检测ui卡顿的方法

    3.代码。

    可以专注于代码的可维护性,可以使用StrictMode(2.3引入),检测应用中执行缓慢的代码或潜在缓慢的代码。
    注意:只是在开发阶段启用StrictMode,发布应用时,记得要禁用它,如果你使用detectAll()方法去简历策略总是可行的。

    静态变量引起内存泄露
    生命周期较长,避免当前activity使用后,存在引用,最后没有释放。

    使用Application的Context
    Application Context的生命周期和应用的生命周期一样长。如果生命长的对象需要一个Context,就可以使用Application对象。

    及时关闭资源
    数据库contentprovider,io,sokect、cursor等。

    列表的优化
    使用ViewHolder 对adapter进行优化。

    谨慎使用external libraries
    即使是针对Android而设计的library,也可能是很危险的,因为每一个library所做的事情都是不一样的。例如,其中一个lib使用的是nano protobufs, 而另外一个使用的是micro protobufs。那么这样,在你的app里面就有2种protobuf的实现方式。这样的冲突同样可能发生在输出日志,加载图片,缓存等等模块里面。同样不要陷入为了1个或者2个功能而导入整个library的陷阱。如果没有一个合适的库与你的需求相吻合,你应该考虑自己去实现,而不是导入一个大而全的解决方案。

    减少内存对象的占用
    · *SparseArray< E > sparseArray = new SparseArray< E >();
    替代HashMap< Integer, E> hashMap = new HashMap< Integer, E>();*
    · SparseBooleanArray,用来取代HashMap< Integer, Boolean>
    ·避免在android里面使用Enum
    · bitmap的inSampleSize:缩放比例和decode format:解码格式可以减少内存占用。

    参考文章

    **

    4. 内存优化。

    使用LeakCanary工具来检测内存泄露并处理。

    参考链接

    5. 电量、网络等优化。

    电量
    网络

    6. 兼容性。

    · 系统的兼容,比如更新下载功能 需要做 7.0的兼容代码处理。
    · UI的兼容,自定义组件控制好文字长度,以免超出外边界。

  • 相关阅读:
    14.OpenFeign 源码分析(springcloud)
    prometheus监控JAVA应用(JVM等)并自定义监控指标
    SpringMVC 02
    基于Selenium+Python的web自动化测试框架
    javaweb数据传参类型(2)
    已解决:KeyError: ‘The truth value of a Series is ambiguous‘ 问题
    天津WEB前端培训哪家好?Web机构推荐!
    【javaWeb学习笔记】HTML,CSS,JS
    数据结构复盘——第八章:排序
    使用ChatGPT创建Makefile构建系统:使用Make运行Docker
  • 原文地址:https://blog.csdn.net/apple_51426592/article/details/127099970