简单了解Android性能优化方向及相关工具

作者:志不坚者智不达 时间:2022-10-15 19:10:54 

开发一款性能优良的应用是每一个Android开发者都必须经历的挑战。在移动端资源有限的前提下,提高应用的性能显得尤为重要。常见的提高APP性能的优化方向有三个:布局和渲染优化、内存优化、功耗优化。

一:布局优化

所谓布局优化,就是尽量减少布局的嵌套层级,减少无用的布局。主要的优化方法有:

(1)优先使用RelativeLayout来减少布局嵌套层数,否则尽量使用LinearLayout。这是因为RelativeLayout能够在不嵌套的情况下完成复杂的布局,而当布局比较简单时优先使用LinearLayout提高性能。

(2)使用include标签来重用布局,使用merge标签来合并布局。

(3)使用ViewStub来实现视图的动态加载,仅当使用的时候才去加载它。

(4)精简布局,删除无用的布局等。

布局优化常用的工具有:Hierarchy Viewer等。

二:渲染优化

渲染优化主要就是提高渲染的速度,避免过度绘制,从而减少画面卡顿。主要优化方法有:

(1)通过布局优化减少布局层级,提高布局的绘制速度。

(2)当同一帧的像素点被绘制多次时,就会产生过度绘制问题(OverDraw),导致资源被浪费,因此需要避免过度绘制。

(3)系统每16ms会发送一次同步信号,进行UI渲染,如果每次都能渲染成功,就能使FPS达到60,从而使用户感觉不到画面卡顿。这就要求onDraw()方法中不能做耗时的逻辑。

绘制优化常用的工具有:开发者选项里的GPU呈现模式分析、调试GPU过度绘制等。

三:内存优化

内存优化最主要的就是避免内存泄漏。常见的内存泄漏有:

(1)使用Static将属性或控件定义为静态的

1)在Activity类里有一个Activity的静态成员变量引用了该Activity实例,由于静态成员生命周期长,从而导致Activity实例需要被GC时由于该实例被引用导致无法被回收。解决方法为在Activity的onDestroy()方法里将该成员变量赋为Null。

2)如果View定义为静态的,由于View持有Activity的context,同样会造成内存泄漏。解决方法为回收Activity实例时同时调用View的onDestroy()方法释放该View。

(2)非静态内部类、匿名内部类造成内存泄漏

由于非静态内部类和匿名内部类默认持有外部类的强引用,当内部类的生命周期比外部类长时就会造成内存泄漏。常见的例子比如Handler内部类造成内存泄漏等。解决方法为将内部类定义为静态的,因为静态内部类没有外部类的引用。如果内部类要访问外部类的成员,可以通过弱引用的方式。

常用的检测内存泄漏工具有:Leakcanary、MAT等。

四:功耗优化

功耗优化主要是减少应用的耗电量,减少不必要的网络请求等。

五:其他优化

比如减小安装包体积,在UI线程避免耗时操作等等。

六:其他优化工具

IDE自带的静态代码检测工具、各种AndroidMonitor;jdk自带的traceView等。

来源:https://www.cnblogs.com/linwenbin/p/11994724.html

标签:Android,性能,优化,工具
0
投稿

猜你喜欢

  • java对指定目录下文件读写操作介绍

    2023-01-26 11:53:17
  • 关于Java反编译字节码文件

    2021-10-07 01:41:32
  • Java实现发送邮件并携带附件

    2023-07-23 19:02:25
  • 详解SpringBoot启动代码和自动装配源码分析

    2021-10-18 08:49:21
  • struts+spring+hibernate三个框架的整合

    2022-08-08 08:13:15
  • C# 对象映射的高性能方案

    2021-09-22 08:03:19
  • springboot+springsecurity如何实现动态url细粒度权限认证

    2023-10-01 04:06:39
  • 时间处理函数工具分享(时间戳计算)

    2021-07-24 05:06:18
  • Java Comparable及Comparator接口区别详解

    2023-07-03 08:19:50
  • 使用Enumeration和Iterator遍历集合类详解

    2023-01-05 11:57:51
  • C#发送邮箱实现代码

    2022-04-16 11:57:57
  • 弹出一个带确认和取消的dialog实例

    2023-11-22 06:07:13
  • Java新手学习之IO流的简单使用

    2023-08-09 15:57:33
  • 详解Android TextView属性ellipsize多行失效的解决思路

    2022-03-02 16:00:32
  • DataGridView不显示最下面的新行、判断新增行、删除行操作

    2022-11-26 16:14:36
  • Java程序员新手老手常用的八大开发工具

    2021-12-04 03:39:04
  • Java实现简易界面通讯录

    2023-02-09 20:12:59
  • 详解Nacos配置中心的实现

    2022-06-05 07:56:49
  • java实现抽奖功能解析

    2021-08-29 16:08:21
  • C#实现Socket通信的解决方法

    2022-06-01 22:06:00
  • asp之家 软件编程 m.aspxhome.com