网站各个功能模块,wordpress教程 网站标题,企业网站开发 文献综述,百度客户端在哪里打开应用启动速度慢页面加载慢交互卡顿CrashANR 针对这些问题#xff0c;可以逐一进行优化
1.启动优化
Android应用启动分为冷启动和热启动以及初次安装启动#xff0c;此处只分析冷启动及热启动 冷启动#xff1a;当设备无该应用进程时#xff0c;用户操作拉起应用#xff… 应用启动速度慢页面加载慢交互卡顿CrashANR 针对这些问题可以逐一进行优化
1.启动优化
Android应用启动分为冷启动和热启动以及初次安装启动此处只分析冷启动及热启动 冷启动当设备无该应用进程时用户操作拉起应用Android系统会先给应用创建进程然后创建Application每个应用进程有且仅有一个Application并在完成Application相关任务之后才会拉起对应Activity然后渲染Activity界面完成冷启动
热启动即冷启动后用户推出应用所有页面Activity回到设备桌面此时正常情况下系统不会立马杀掉进程及Application还会保留一段时间此时再拉起应用系统直接初始化对应Activity页面不会再创建Application这就是热启动。所以热启动一定比冷启动速度更快
了解了Android应用的启动机制就可以针对性优化。 首先需要明确一个启动优化的和核心思想启动过程中尽量少做事。根据这个思维逻辑进行优化。 冷启动创建进程这是系统的事我们干预不了那就要在Application中做文章。 随着应用的业务日益复杂使用到的模块日益增多就可能会有越来越多的模块在Application中完成这些模块任务也是导致应用启动速度慢的原因之一为此我们总结了几条优化经验
必要且耗时的考虑放到子线程中处理非必要且耗时的考虑使用异步加载或按需加载即使用到了再去执行对应模块任务
接下来是Activity的启动加载这是冷启动、热启动都需要处理的事情。根据activity的生命周期我们知道activity要执行到onResume方法页面才算启动完成并显示所以需要对其前面的生命周期方法减少耗时根据这个逻辑我们就到了第二条需要优化的方面即页面加载慢问题优化
2.页面加载慢优化
根据前面叙述我总结了几条优化经验欢迎补充
使用懒加载针对主页UI比较复杂的应用考虑使用懒加载的方式比如典型的页面由TabViewpagerFragmeng组成启动时只加载当前可见的Fragment数据其他Fragment使用懒加载方式加载减少页面布局层级合理使用RelativeLayout和LinearLayout等容器布局比如LinearLayout加载效率要高于RelativeLayout那在布局层级相同的情况下就使用LinearLayout但有时使用LinearLayout时可能会比使用RelativeLayout多几个层级综合考虑之下就需要使用RelativeLayout比较合适此外针对自定义控件我们还可以考虑使用merge标签减少布局层级。提高显示速度使用ViewStub标签按需加载仅加载我们需要显示的UI。ViewStub是一个轻量级的View它是一个看不见的并且不占布局位置只有ViewStub会被初始化然后当ViewStub被设置为可见时或是调用了ViewStub.inflate()时ViewStub所指向的布局才会被加载和实例化然后ViewStub的布局属性都会传给它指向的布局。避免过度绘制移除xml中非必要的背景移除Window的默认背景以及按需展示背景图片
3.交互卡顿
应用启动后用户肯定是需要交互的交互的过程中如果出现页面卡顿比如页面滑动不流畅、点击事件响应迟钝等问题就有必要对此进行优化对此我也总结了几条优化经验 合理的刷新机制减少UI的刷新次数比如刷新进度条在符合产品要求的基础上只有在进度变化1时进行进度刷新否则拦截刷新操作然后避免后台线程影响前台操作比如在一个带有图片的列表中用户正在滑动列表滑动过程中可以考虑暂停列表中图片的下载和加载等滑动停止后再恢复最后是减少刷新区域比如删除操作一个ItemUI刷新控制在当前Item区域 提升动画性能优先考虑使用属性动画完成需求属性动画相比补间动画有更好的性能然后尽量少用帧动画帧动画非常吃内存特别是图片多而且大的时候 其他基本的不要在主线程执行耗时任务数据一次性不要加载过多使用懒加载方式分页加载
4.Crash
安卓应用程序crash主要有两大因素 1.内存溢出OOM导致crash。需要知道Android应用也是一个Java程序所以也是运行在Java虚拟机里的。而虚拟机分配给我们应用的内存也是有限的所以当应用使用的内存占用超过了虚拟机分配使用的内存就会造成内存溢出进而导致程序异常Crash。所以作为开发者就有必要关注程序运行过程中内存的使用。另外内存的高占用还会导致频繁的GC操作导致内存抖动GC期间还会影响到工作线程使其停顿也就间接导致了应用的卡顿此时就涉及内存的优化。内存的优化涉及好多方面包括如内存泄漏处理、图片内存优化等
2.程序设计逻辑缺陷导致crash这个没什么说的暴露一个修改一个开发者开发时多注意按开发质量要求进行。
5.ANR
ANR即应用无响应这也是我们开发中容忍度比较低的一个问题总的 来说引起ANR的根本原因有以下两种 1.应用程序自身有逻辑缺陷或者在某些异常场景触发了此缺陷导致的ANR比如主线程执行了耗时任务、主线程阻塞、死循环、死锁等针对这些问题导致的ANR一般可以通过trace日志查看堆栈就可以定位出问题代码一样地这种问题发现一个改一个。另外有一个常见的因系统层的问题导致的ANR我们是不好处理的就是Binder响应不及时这种问题据我所知应用层没有比较好的解决方法若某位大佬清楚望告知
2.由于Android设备其他进程导致的CPU占用高导致当前应用进程无法抢到CPU时间片导致了ANR这类ANR与设备硬件属性有关应用层没有太多的操作空间