Theme 切换启动优化--异步优化核心思想:子线程分担主线程任务,并行减少时间。异步优化,分为 : 常规异步优化 和 最优异步优化 两种常规异步优化经验:(1)采用线程池的方法,线程的个数按照CPU的个数来;(2)并不是每个Application.onCreate()中的语句都需要放在线程池中。比如有的方法里含有“Handler handl...
这个文章主要参考慕课网的《国内Top团队大牛带你玩转Android性能分析与优化》一,性能优化有那些难题?性能优化主要有以下3个方面:性能表现差APP的自身性能表现差。从APP自身视角来说主要有:1.App启动慢,卡顿,丢帧2.内存占用高,抖动频繁3.耗电,网络请求慢4.崩溃率,异常率高线上问题无从追查从排查问题的视角来说:难点主要有:1.如何保证异...
启动优化背景介绍(1)启动速度是用户的第一体验。(2)八秒定律。在互联网中,如果一个网页被打开了8秒还没有打开,就会流失70%的用户。启动分类google 提供的文档:App startup time(1)冷启动(2)热启动(3)温启动(1)Click Event: 用户给的一个点击事件(2)IPC:点击事件会触发一个IPC的操作...
这篇文章主要介绍在做启动优化的时候,会用到那些工具。一,启动时间的测量方式有两种方式,分别为 ADB命令 和 手动打点 。adb命令命令格式“ adb shell am start -W packagename/首屏Activity”, 如下:时间:(1)ThisTime:最后一个Activity启动耗时(2)TotalTime:所有Activity启动耗时(...
启动优化--AOP获取方法耗时AOP 的意思是面向切面编程,详见 Spring 中的 AOP,是一个意思。背景需要知道启动阶段各个方法耗时情况,常规操作是通过手动埋点的方式,这个方式代码的侵入性强,工作量大。AOP介绍Aspect Oriented Programming , 面向切面编程,优点如下。(1)针对同一类问题的统一处理(2)无侵入添加代码...
延时最优在初始化的时候,很多子任务不需要在Activity的onCreate()方法之前执行,因此,可以将这些子任务延时到初始化结束后执行。常规方法(1)使用: new Handler().postDelayed(Runnable r, long delayMillis);缺点:(1)时机不便控制(2)用户持续操作时,任然会卡顿更优方案核心思想:对延时...
内存优化常用工具memory profiler(1)这个工具是Android Studio自带的工具,很直观的发现内存抖动现象,但是觉他的分析,需要MAT工具。见:Android内存优化--抖动memory analyzer(1)这个工具的另一个名字叫MAT,比较强大。(2)下载地址:https://www.eclipse.org/mat/do...
内存优化介绍(1)内存是大问题,但缺乏关注(2)内存问题,往往比较隐蔽,bug表现和真正的原因往往不是一个,压死骆驼的最后一根稻草内存问题(1)内存抖动:通过工具发现内存是锯齿状,内存抖动会导致GC频繁,GC频繁会导致卡顿(2)内存泄漏:会导致可用内存减少,在内存不够时,GC执行频繁(3)内存溢出:OOM,程序异常工具(1)Memory Pro...
内存抖动定义:内存频繁分配和回收导致内存不稳定表现:频繁GC,内存曲线呈锯齿状危害:导致卡顿,OOM内存抖动为什么会导致OOM?(1)频繁创建对象,导致内存不足及碎片化(不连续)(2)不连续的内存片无法被分配,导致OOM// 代码模拟内存抖动public class ShakeActivity extends AppCompatActivity {...
内存泄漏定义:内存中存在已经没有使用的对象表现:内存抖动,可用内存逐渐变少危害:内存不足,GC频繁,OOM常见的内存泄漏的场景:(1)静态变量导致的内存泄漏。(2)单例模式导致的内存泄漏。(3)属性动画导致的内存泄漏。如何检测出内存泄漏(1)先使用memory profiler 检测是否有内存阶梯状增长。(2)导出问文件(3)使用...
布局优化--布局加载实战背景介绍(1)布局文件读取慢:IO过程(2)创建View慢:反射(比new慢3倍)有以下两种方法可以优化布局加载,分别为:方法1:异步AsyncLayoutInflater简称:异步Inflate工作流程:(1)在WorkThread加载布局,(原生使用的办法是在UI线程中加载布局),(2)加载结束后,回调主线程。优点:节约...
Bitmap优化在Android内存优化中,图片是经常用到的,也是十分消耗内存的,因此Bitmap优化是内存优化的重点。Bitmap内存模型获取Bitmap占用内存(1)通过自身方法 getByteCount 获取。(2)宽 * 高 * 一个像素点占用内存。检测不合理的图片背景:图片的宽高远大于控件的宽高。比如从网上获取的图片宽高远大于控件的1...
内存优化--线上方案线上问题,最大的问题是内存泄漏。内存溢出和内存抖动来说,一般是因为内存泄漏引起的。常规方案总结:(1)Dump文件太大,和对象数正相关(2)上次失败率高,分析困难(3)配合一定策略,有一点效果LeakCanary定制可以将LeakCanary带到线上使用,提前预设泄漏怀疑点,发现泄漏回传总结:(1)不适合所有情况...
瘦身优化1 代码瘦身(1)代码混淆(2)三方库处理(3)移除无用代码2 资源瘦身(1)冗余资源(2)图片压缩(3)资源混淆3 so瘦身(1)So移除(2)更优方案(3)其他方案...
布局优化绘制原理cpu负责计算显示内容GPU负责棚格化(UI元素绘制到屏幕上)16ms发出VSync信号触发UI渲染大多数的Android设备屏幕刷新频率:60Hz布局加载原理注意:通过反射创建的对象,比直接 new 出来的对象要慢3倍。优化工具(1)Systrace a) 关注Frames b) 正常:绿...
获取布局耗时常规方式背景:获取每个界面加载耗时实现:覆写setContentView()方法,手动埋点AOP/ArtHook(1)AOP实现,(在前面的启动优化中有讲解)使用:切Activity的 setContentView() 方法。(2)ArtHook实现,(前面内存优化有讲解,主要是检测获取的图片大小是否和显示控件匹配)使用:同样是切Act...
布局绘制本文目标:(1)优化布局层级及复杂度(2)避免过度绘制视图绘制原理(1)测量:确定大小。(自顶向下进行视图树的遍历,确认每个 ViewGroup 和 View 元素应该为多大)(2)布局:确定位置。(也是自顶向下的遍历操作,每个 ViewGroup 根据测量阶段确认的大小,确认自己应该摆放的位置)(3)绘制:绘制试图。(这个阶段,针对视图树中的每个对...
卡顿优化介绍(1)卡顿是除了crash之外,另一个非常严重的问题,会直接影响到用户体验。(2)其他的性能问题(内存占用率高,耗费流量等),用户不容易发现,但卡顿会。(3)卡顿问题难以定位卡顿问题难以定位的原因?(1)产生原因错综复杂:代码,内存,绘制,IO等(2)不易复现:当时场景强相关工具(1)CPU Profiler(2)...
卡顿问题检测,分:自动化卡顿检测方案 和 卡顿单点问题检测方案 两种。1 自动化卡顿检测方案为什么需要自动化检测方案?(1)系统工具适合线下针对性分析(2)线上及测试环节需要自动化检测方案方案的原理(1)消息处理机制,一个线程只有一个Looper(2)mLogging对象在每个message处理前后被调用(3)主线程发生卡顿,是在dispat...
ANR分类(1)KeyDispatchTimeout,5s(2)BroadcastTimeout,前台10s,后台60s(3)ServiceTimeout,前台20s,后台200sANR执行流程(1)发生ANR(2)进程接受异常终止信号,开始写入进程ANR信息(3)弹出ANR提示框(ROM表现不一)ANR解决套路(1)线下分析,使用如下命令...
界面秒开实现(1)界面秒开就是一个小的启动优化(2)可以借鉴启动优化及布局优化章节方法:(1)SysTrace,优雅异步 + 优雅延迟初始化(2)异步Inflate,X2C,绘制优化(3)提前获取页面数据界面秒开率统计(1)onCreate 到 onWindowFocusChanged 的时间,就是用户打开界面的耗时。有时不是很准确(2)特定的...
网络优化介绍维度误区
线程优化线程调度(1)分时调度:轮流获取,均匀CPU时间(2)抢占式调度:优先级高的获取,jvm采用Android线程调度(1)nice值 Process类中定义, 值越小,优先级越高 默认是THREAD_PRIORITY_DEFAULT,0(2)cgroup (如果由1个高优先级,1...
网络优化--精准获取流量消耗
网络优化--工具(1)Network Profiler(2)抓包工具(2.1)Charles(2.2)Fiddler(2.3)Wireshark(2.4)TcpDump(3)Stetho
电量优化查看APP电量使用情况(1)耗电排行(2)电量广播// 使用广播获取电量情况 IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_BATTERY_CHANGED); Intent intent =...
WebView异常监控WebView是非常重要的控件。代码示例:// 视频12-3,监控释放白屏public class TestBlankActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.o...
Android存储优化(1)SharePreferences优化(2)日志存储优化其他优化
流量优化
质量优化
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号