用户体验方面的性能优化

一..activity中应不应该有static变量

1.占用内存,并且内存一般不会释放;

2.在系统不够内存情况下会自动回收静态内存,这样就会引起访问全局静态错误。

3.不能将activity作为static静态对象,这样使activity的所有组件对象都存入全局内存中,并且不会被回收;

 二.优化建议

1.布局优化

减少层级。合理使用 RelativeLayout 和 LinerLayout,合理使用Merge。
提高显示速度。使用 ViewStub,它是一个看不见的、不占布局位置、占用资源非常小的视图对象。
布局复用。可以通过 标签来提高复用。
尽可能少用wrap_content。wrap_content 会增加布局 measure 时计算成本,在已知宽高为固定值时,不用wrap_content 。
删除控件中无用的属性。

2.避免过度绘制

过度绘制是指在屏幕上的某个像素在同一帧的时间内被绘制了多次,在多层次重叠的UI结构中,如果不可见的UI也在做绘制操作,就会导致某些像素区域被绘制了多次,从而浪费了多余的CPU以及GPU资源

如何避免过度绘制呢,如下:

①布局上的优化。移除XML中非必须的背景,移除window默认的背景、按需显示占位背景图片

扫描二维码关注公众号,回复: 5616326 查看本文章

②自定义view优化,使用canbas.cliRect()来帮助系统识别那些可见的区域,只有在这个区域内才会被绘制


3.启动优化

通过对启动速度的监控,发现影响启动速度的问题所在,优化启动逻辑,提高应用的启动速度,启动主要完成三件事:UI布局、绘制和数据准备,因此启动速度优化就是需要优化这三个过程:

①.UI布局  应用一般都有闪屏页,优化闪屏页的UI布局,可以通过Profile GPU Rendering 监测丢帧情况

②.启动加载逻辑优化,可以采用分布加载、异步加载、延期加载策略来提高应用启动速度

③.数据准备 。数据初始化分析,加载数据可以考虑用线程初始化的策略

4合理的刷新机制

在应用开发过程中,因为数据的变化,需要刷新页面来展示新的数据,但频繁刷新会增加资源开销,并且可能导致卡顿发生,因此,需要一个合理的刷新机制来提高整体的UI流畅度,合理的刷新需要注意一下几点:

①尽量减少刷新次数

②尽量避免后台有高的CPU线程运行

③缩小刷新区域.

 5.其他

在实现动画效果时,需要根据不同场景选择合适的动画框架来实现,有些情况下,可以用硬件加速方式来提供流畅度


内存优化:

1.Java对象生命周期

 一般Java对象在虚拟机上有7个运行阶段:

创建阶段>应用阶段>不可见阶段>不可达阶段>收集阶段>终结阶段>对象控件重新分配阶段

2.常见内存泄露场景

如果在内存泄露发生后再去找原因并修复会增加开发的成本,最好在编写代码时就能够很好的考虑内存问题,写出更高质量的代码,这里列出一些常见的内存泄露场景,在以后的开发过程中需要避免这类问题。

①资源对象未关闭,比如Cursor、File文件等,往往都用了一些缓冲,在不使用时,应该及时关闭它们。

②注册对象未注销,比如事件注册后未注销,会导致观察者列表中维持着对象的引用。

③累的讲台变量持有大数据对象

④非静态内部类的静态实力

⑤Handler临时性内存泄露,如果Handler是非静态的,容易导致Activity或Service不会被回收

⑥容器中的对象没清理造成的内存泄漏

⑦Webview存在着内存泄露的问题,在应用中只要使用一次Webview,内存就不会被释放掉

3.优化内存空间

没有内存泄露,并不意味着内存就不需要优化,在移动设备上,由于物理设备的存储空间有限,Android系统对每个应用进程也都分配了有限的堆内存,因此使用最小内存对象或资源可以减小内存开销,同时让GC能更高效地回收不再需要使用的对象,让应用堆内存保持充足的可用内存,使应用更稳定高效的运行,常见做法如下:

①对象引用,强引用、软引用、弱引用、虚引用四种引用类型,根据业务需求合理使用不同,选择不同的引用类型

②减少不必要的内存开销,注意自动装箱,增加内存复用,比如有效利用系统自带的资、试图复用、对象池、Bitmap对象的复用

③使用最优的数据类型,比如针对数据类容器结构,可以使用ArrarMap数据结构,避免使用枚举类型,使用缓存Lrucache等等

④图片内存优化,可以设置位图规格,根据采样因子做压缩,用一些图片缓存方式对图片进行管理等等

稳定性优化

Android应用的稳定性定义很宽泛,影响稳定性的原因很多,比如内存使用不合理、代码异常场景考虑不周全、代码逻辑不合理等,都会对应用的稳定性造成影响,其中最常见的两个场景是:Crash和ANR,这两个错误蒋会使得程序无法使用,比较常用的解决方式如下:

①提高代码质量。比如开发期间的代码审核,看些代码设计逻辑,业务合理性等

②代码静态扫描工具,常见工具有Android Lint、Findbugs、Checkstyle、PMD等

③Crash监控,把一些崩溃的信息,异常信息及时地记录下来,以便后续分析解决

④Crash上传机制,在Crash后,尽量先保存日志到本地,然后等下一次网络正常时再上传日志信息

耗电优化

在移动设备中,电池的重要性不言而喻,么有电什么都干不成,对于操作系统和设备开发商来说,耗电优化一直没有停止,去追求更长的待机时间,而对于一款应用来说,并不是可以忽略电量使用问题,特别是那些被归为“电池杀手”的应用,最终的结果是被卸载,因此,应用开发者在实现需求的同事,需要尽量减少电量的消耗

在Android5.0以前,在应用中测试电量消耗比较麻烦,也不准确,5.0之后专门引入了一个获取设备上电量消耗信息的API:Batter Historian。Battery Historian 是一款由Google提供的Android系统电量分析工具,和Systrace一样,是一款图形化数据分析工具,直观的展示出手机的电量消耗过程,通过输入电量分析文件,显示消耗情况,最后提供一些可供参考电量优化的方法。

除此之外,还有一些常用方案可提供:

①计算优化,避开浮点运算等

②避免WaleLock使用不当

③使用Job Scheduler

减少安装包大小的常用方案

①代码混淆。使用proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能。
②资源优化。比如使用 Android Lint 删除冗余资源,资源文件最少化等。
③图片优化。比如利用 AAPT 工具对 PNG 格式的图片做压缩处理,降低图片色彩位数等。
④避免重复功能的库,使用 WebP图片格式等。
⑤插件化。比如功能模块放在服务器上,按需下载,可以减少安装包大小
 

参考https://blog.csdn.net/liangtianmeng/article/details/82462957


 

猜你喜欢

转载自blog.csdn.net/xiaoshuxgh/article/details/88682823
今日推荐