美文网首页初见
性能优化总结

性能优化总结

作者: 杰奎琳子 | 来源:发表于2020-07-05 10:56 被阅读0次

性能优化方向

流畅(启动速度、卡顿)

稳定(内存泄漏、崩溃)

功耗(耗电、网络)

安装包(包体积)

一、 流畅

卡顿优化

1、 布局优化

简单布局使用Java代码代替布局文件

Android加载Xml布局文件,并将其转换成View,需要经历XML解析,使用Java代码直接创建View可以省去这一过程

使用标签

:复用布局标签

: 配合使用,如果include复用的布局和其上层布局是同一种布局,则可以使用merge标签减少嵌套层级

: 在需要的时候加载。可以使用ViewStub标签来代替android:visibility=“gone”

属性。在需要的时候调用viewStub.inflate() 加载显示

1.3 减少布局嵌套层级,相同层级使用性能更好的布局

1.4 减少使用wrap_content 属性,避免View多次触发measure、layout

2、 绘制优化

避免过度绘制:

不要给View设置不必要的背景(其他无用属性也应该避免)

避免过多的层级嵌套

OnDraw()优化:

避免创建新对象

避免执行大量耗时操作

3、 避免频繁刷新View,导致View 频繁绘制

4、 避免频繁GC,导致短暂阻塞渲染

5、 UI线程中不做耗时操作(数据库、IO、或大量轻微耗时操作)

6、 生命周期优化:

在onCreate、onResume、onStart等生命周期方法中,不做太多初始化操作

7、 列表和Adapter优化:

a) Adapter中复用ItemView、避免频繁调用Adapter刷新方法

b) 列表滑动时不进行数据加载和UI刷新

c) Adapter中避免耗时操作

8、 避免同一动画多次执行,导致CPU或GPU负载过重

9、 避免ANR发生

10、使用合理的数据结构和算法

 启动速度优化

冷启动:冷启动是指应用从头开始启动,系统进程在冷启动后才创建应用进程。

冷启动可以分为两个阶段:

第一阶段:

在冷启动开始时,系统有三个任务,它们是:

加载并启动应用。

在启动后立即显示应用的空白启动窗口。

创建应用进程。

第二阶段:

系统一创建应用进程,应用进程就负责后续阶段:

创建应用对象。

启动主线程。

创建主 Activity。

扩充视图。

布局屏幕。

执行初始绘制。

一旦应用进程完成第一次绘制,系统进程就会换掉当前显示的后台窗口,替换为主 Activity。此时,用户可以开始使用应用。

在创建应用和创建 Activity 的过程中可能会出现性能问题。所以冷启动优化主要针对对第二阶段优化。

优化:

1、 Application 优化

OnCreate()方法中,将耗时操作放到子线程中进行

2、 Activity 优化

a) 避免在Activity生命周期中进行耗时操作

b) 布局优化

c) 绘制优化

热启动:应用已经被启动,后台存在该应用进程,再次打开该App的过程称为热启动。

热启动后台已经存在该应用进程,所以不会走Application创建这一过程,而是直接进入Activity中

二、 稳定

 内存优化

1、内存泄漏

1.1单例模式引起的内存泄露(使用全局Context)

1.2 Handler引起的内存泄漏

a)使用静态内部类继承Handler

b)使用弱引用持有当前Activity,在handleMessage()方法中判断弱引用Activity是否为空

c)页面销毁时,移除消息

1.3 非静态内部类引起内存泄漏(eg:线程的Runnable方法)

非静态内部类会持有外部类的引用,如果当前Activity销毁,类还在执行,会导致Activity被持有

1.4 图片引起的内存泄漏

大图压缩、Bitmap及时释放、使用Glide等优秀的图片缓存框架

1.5 WebView引起的内存泄漏

a)开启独立进程处理web View逻辑

b)页面销毁的时候,清空WebView内容

1.6 资源未关闭(IO、Cursor)、注册的资源未及时解除注册

1.7 动画引发的内存泄漏

及时取消动画

1.8 集合未及时清理导致的内存泄漏

将一个对象放到集合中后,集合就会持有该对象的引用,导致对象无法被回收造成对象内存泄漏

2、内存溢出

2.1 大量内存泄漏导致的内存溢出

2.2 图片过大、图片资源过多导致的内存溢出

a)大图需要压缩、缓存

b)加载图片使用优秀的开源框架(eg:Glide)

2.3 ListView的Adapter中未复用ConcertView

2.4 for循环中无线创建对象

3、 内存抖动

3.1 短时间内大量字符串拼接

3.2 for循环或者频繁刷新的地方创建对象

三、 功耗

 网络优化:

目标:提高网络请求速度、节约流量

a)加载WebP格式的图片,可以大幅节约流量,提高加载速度

b)图片加载使用缓存,避免重复网络加载。优秀的图片加载框架自带缓存功能(Glide)

c) 在WiFi环境进行数据传输和下载,大文件下载使用断点续传

d)网络数据缓存,网络不好时可以使用缓存数据

e)初始界面接口划分合理,减少网络请求时间

f)设置合理的超时时间

 电量优化

a)使用WiFi进行数据传输,WIFI传输数据比移动网络传输数据不仅省流量还省电

b)电量低时,不要执行非紧急任务。非紧急任务可以选择合适的时间执行

c)避免频繁的间隔进行网络操作,最好批量进行网络请求

e)网络请求时,先判断网络状态,并设置合理的超时时间,避免一直在后台等待数据

f)通过获得手机电量,决定是否执行一些耗电操作

g)避免后台频繁唤醒CPU

四、 安装包

APK结构如下:

优化方案有:

a)屏幕只适配一套代码xxh

b)使用WebP格式图片、.9图片

c)小图标使用shape或者矢量图

c)开启混淆minifyEnabled true

shrinkResources true 删除无用资源

zipAlignEnabled true 压缩优化

d)移除无用代码、资源、删除无用功能

相关文章

  • iOS 性能优化总结

    iOS 性能优化总结 iOS 性能优化总结

  • IOS的性能优化包括哪几点

    iOS性能优化总结 iOS性能优化总结。关于 iOS 性能优化梳理: 基本工具、业务优化、内存优化、卡顿优化、布局...

  • App瘦身、性能优化总结

    App瘦身、性能优化总结 App瘦身、性能优化总结

  • Awesome Extra

    性能优化 性能优化模式 常见性能优化策略的总结 Spark 性能优化指南——基础篇 Spark 性能优化指南——高...

  • iOS必读 - 收藏集 - 掘金

    iOS 性能优化总结 - iOS - 掘金关于iOS 性能优化梳理: 基本工具、业务优化、内存优化、卡顿优化、布局...

  • Android 性能优化

    Android APP性能优化(最新总结)Android性能优化全方面解析Android性能优化的方方面面http...

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • mysql程序

    MySQL性能优化方案总结

  • 前端性能优化

    js性能小贴士——优化循环 前端网页与js性能优化 我总结的js性能优化的小知识 提高 web 应用性能之 Jav...

  • 前端性能 优化 大全

    js性能小贴士——优化循环 前端网页与js性能优化 我总结的js性能优化的小知识 提高 web 应用性能之 Jav...

网友评论

    本文标题:性能优化总结

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