
性能相关
文章平均质量分 88
yun_hen
这个作者很懒,什么都没留下…
展开
-
Android广播发送流程(广播3)
Android S广播发送流程1. 广播发送流程2. 广播发送3. 系统处理广播发送3.1 AMS接收广播的请求3.2 修改增加默认flag解析可选广播参数BroadcastOptions3.4 保护广播isProtectedBroadcast、特定action的处理3.5 发送粘性广播的处理3.6 筛选出静态广播接受者3.7 筛选出动态广播接受者3.8 非oder的平行广播的入队与分发3.8 order广播接收者的过滤4. 广播队列的处理4.1 新建广播队列4.2 广播接收者入队列4.3 广播队列的分发4原创 2022-05-03 20:23:08 · 6886 阅读 · 2 评论 -
Android 静态广播注册流程(广播2)
Android S静态广播注册流程1. 静态广播注册的流程2. 在AndroidManifest静态注册广播3. AndroidManifest静态注册接受者的安装过程4. 总结1. 静态广播注册的流程上一篇文章讲了动态广播的注册(系统存储在mReceiverResolver中),这篇文章主要讲解静态广播的注册流程2. 在AndroidManifest静态注册广播还是以亮屏SCREEN_ON和开机BOOT_COMPLETED静态广播为例子//在AndroidManifest.xml中定义如下原创 2022-04-27 16:56:15 · 8924 阅读 · 0 评论 -
Android 动态广播注册流程(广播1)
Android S动态广播注册流程1. 动态广播注册的流程2. 新建一个动态广播接收者3. App部分的registerReceiver4. system_server侧的广播注册5. 总结一下1. 动态广播注册的流程先看一下大致文件和流程如下:2. 新建一个动态广播接收者广播好久之前就准备写了,最近有时间就先把广播这部分写完这篇文章就先将动态广播注册的流程先看一下,在一个activity中注册一个亮屏的动态广播 //新建一个BroadcastReceiver,用于接收广播 p原创 2022-04-25 21:48:39 · 7932 阅读 · 2 评论 -
Android adj调整 --- computeOomAdjLSP流程详解
Android S adj调整 --- computeOomAdjLSP详细注释Android S adj调整 --- computeOomAdjLSP详细注释Android S adj调整 — computeOomAdjLSP详细注释这次就先讲OomAdjuster.java中adj调整最为关键的函数computeOomAdjLSP,这个函数几乎占了adj调整代码1/3的代码量,非常重要,建议阅读之前先看一下之前的:Android S进程的adj值、Android adj调整时的各类进程状态。至于Oo原创 2022-03-27 18:44:21 · 9854 阅读 · 3 评论 -
Java代码执行顺序
Java代码执行顺序1. Java初步认知2. Javayun.java例子3. 反编译Javayun.class文件4. 分析Javayun_dxdump文件5. 再来一个网上的例子JavaTest.java6. 查看一下JavaTest的反编译数据7. 总结一下1. Java初步认知大家对于Java的执行顺序应该都有一定了解,起码书本上或者影响中有一点了解,如静态变量、普通变量、类、静态函数、静态代码块、构造函数应该都知道和会用。这次就将一下Java入门的基础内容:clint函数、init函数、原创 2022-03-06 21:58:46 · 4621 阅读 · 0 评论 -
Android如何查找java代码编译路径
Android如何查找java代码编译路径1. 源文件代码位置2. 查找文件编译后存放的地方3. 找一下这个文件在哪里4. 看一下实际效果1. 源文件代码位置如果有code search,那么直接使用code search,如果没有可以使用locate "***.java"来查找对应的文件举一个例子想要调试FinalizerDaemon这个class,先“frameworks/base”搜索一下在frameworks/base/config/preloaded-classes可以找到类似定义j原创 2022-03-03 20:38:03 · 3724 阅读 · 1 评论 -
Android进程的adj值
Android S进程的adj值1. Android S进程的adj值1. Android S进程的adj值//在未调整adj之前(没有进行初始化过),adj的值是INVALID_ADJ,这个值非常小,也就是优先级很大static final int INVALID_ADJ = -10000;//这个是未知的adj,一般cachedAdj的初始值,在cached进程进行重新调整(assignCachedAdjIfNecessary)之前会是这个值static final int UNKNOWN_A原创 2022-02-20 11:34:57 · 4320 阅读 · 1 评论 -
Android adj调整时的各类进程状态
Android adj调整时的各类进程状态1. dump一下进程的信息2. ProcState的枚举值和打印字串的对应关系3. ProcState的各类状态都是在什么时候设置,都代表什么意思1. dump一下进程的信息使用adb shell dumpsys activity p可以将Android的各类进程状态信息打印出来,这通常对于分析进程的运行状态和adj有很大帮助Process LRU list (sorted by oom_adj, 46 total, non-act at 6, non-s原创 2022-02-11 11:44:27 · 5005 阅读 · 1 评论 -
微信tinker导致冷启动变慢的问题优化
微信tinker导致冷启动变慢的问题优化1. Android S用户反馈微信启动慢2. 抓取微信systrace查看一下3. tinker对冷启动时间的影响4. 修改方案5. Open Dex是什么时候触发的?其中传入的location又是那里来的?6. 断点看一下带tinker和不带tinker的ClassLoader7. 微信内部tinker加载的流程8. 优化tinker导致启动慢的方案1. Android S用户反馈微信启动慢首先第一个想到的就是dex的状态问题是否有进行oat dex(例如原创 2021-12-28 20:21:09 · 3331 阅读 · 0 评论 -
Android进程保活的常用方法
Android进程保活的常用方法进程保活和去保活,一直是一个热门的讨论话题,先看一下保活方法方法1:APP内部提升优先级Perceptible(用户可以感受到其运行的(如后台运行的music playback),1)在服务的oncreate添加 startForeground(1, new Notification()); (这种需要常驻通知,如mtkloger、music等)2)还有另外一种方法,就是am.setProcessForeground/setProcessImportant(mFo原创 2021-12-02 11:28:12 · 4028 阅读 · 0 评论 -
如何使抓取的各类profile生效
如何使抓取的各类profile生效1. system_server系统的profile2. boot image上层所有进程的profile3. 系统预置应用的profile1. system_server系统的profileSystemServer.art-profile1、增量修改源码中的services/art-profile可以源码中的art-profile做比较,看一下哪些是新增的frameworks/base/services/art-profile如果是这样的话,建议“Androi原创 2021-11-23 09:48:54 · 2592 阅读 · 0 评论 -
Android S抓取各类profile的方法
Android S抓取各类profile的方法1. 准备环境2. 开始抓取3. 转换一下profile1. 准备环境这里讲的是自己的方法:大概思路就是将dex全部限制掉,就算没有限制掉的也只做默认quicken模式,在build里面找设置compilerFilter的地方,全部改了,有多没少(有部分可以不需要修改,大家也可以参考Google的方法,这里只是提供大概的伪代码思路)1、build/make/target/product/runtime_libart.mk中修改,增加下面的修改//bu原创 2021-11-22 09:32:18 · 2658 阅读 · 1 评论 -
Android S中各类dex文件
Android S中各类dex文件1. Android S中APK(预编译)中的dex文件2. 安装/开机过程中的dex文件3. 出现prof文件后,手动触发重新做一次dex2opt4. system_server的dex文件5. Boot image 文件1. Android S中APK(预编译)中的dex文件例如Photos,26M ./oat/arm/Photos.vdex5.9M ./oat/arm/Photos.odex1.4M ./oat/arm/Photos.art33M ./o原创 2021-11-19 15:16:42 · 3584 阅读 · 0 评论 -
Android S ART的变化
Android S ART的变化1. Android compiler-filter的发展历程2. profile与其中的appimage3. Android S相对于Android R的变化1. Android compiler-filter的发展历程通过历代Android compiler-filter,可以发现Google在art这块的技术路线Android M(6) Android N(7) Android O(8) Android P(9) Android Q(10) Android R(1原创 2021-11-19 10:11:50 · 12344 阅读 · 0 评论 -
art profile生成差异的问题分析
art profile的问题分析1. art profile生成差异的问题2. cts测试内容的分析3. 模拟验证4. snapshot-profile的流程5. prepareAppProfile的流程1. art profile生成差异的问题最近Android S遇到一个问题,art升级以后,cts测试失败了,报错日志I/ModuleListener: [1/1]com.android.compatibility.common.tradefed.testtype.JarHostTestcom原创 2021-10-12 17:37:26 · 2779 阅读 · 6 评论 -
heaptargetutilization/heapmaxfree/heapminfree/heapstartsize/multiplier虚拟机参数的配置
关于虚拟机的参数的调整 --- heaptargetutilization/heapmaxfree/heapminfree/heapstartsize/foreground-heap-growth-multiplier的配置1. 这些参数都是什么意思2. ART解析使用这些参数3. 案例讲解4. ART参数调试时加入的日志1. 这些参数都是什么意思[dalvik.vm.foreground-heap-growth-multiplier]: [2.0]=>标记的是前后台进程分配内存用量的时候增长原创 2021-09-02 20:19:56 · 2015 阅读 · 0 评论 -
关于虚拟机参数的调整 --- heapgrowthlimit/heapsize的配置
关于虚拟机的参数的调整 --- heapgrowthlimit/heapsize的配置1. ProtoLog如何动态打开(android R开始引入)1. ProtoLog如何动态打开(android R开始引入)类似源码里面的 ProtoLog.v,在userdebug版本可以动态打开原创 2021-08-31 20:50:30 · 6902 阅读 · 0 评论 -
Android各类日志如何动态打开
Android各类日志如何动态打开ProtoLog如何动态打开(android R开始引入)2. 关于代码里面写的isLoggable,开关如何打开(很早就有了)3. ams wms等日志的动态打开4. 其它动态日志ProtoLog如何动态打开(android R开始引入)类似源码里面的 ProtoLog.v,在userdebug版本可以动态打开ProtoLog.v(WM_DEBUG_ORIENTATION, "Orientation continue waiting for draw in %s"原创 2021-08-24 18:45:40 · 6471 阅读 · 1 评论 -
性能问题分析方法[1] --- RAM
性能问题分析方法(1) --- RAM性能问题分析方法(1) --- RAM1. RAM内存占用导致的问题2. Native process的内存调试方法3. 显示端的内存调试4 Java process导致的内存泄漏4.1 MAT分析4.2 Android Studio的Profile分析4.3 java native分析4.4 binder分析4.5 其它调试方法功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中原创 2021-05-11 15:58:30 · 2362 阅读 · 1 评论 -
Android转屏流程与优化(Google转屏算法)
Android转屏流程与优化(Google转屏算法)1. 转屏慢与整体分析思路我们用手机转屏的时候,会发现有时候转屏特别慢,快的和慢的会相差1倍,例如快的转屏700ms,慢的转屏会1.2s以上.目前分析思路是: 1、gsenor上报数据是否有延迟? 2、gsensor上报的数据准确后,google的算法需要多长时间才能转换为方向改变? 3、上层处理转屏时间是多长时间?即冻屏时间是多长 4、转原创 2017-12-14 09:50:06 · 4240 阅读 · 1 评论 -
android N进程启动流程(一)(捕获输入事件、准备创建activity、焦点切换)
android N进程启动流程(一)(捕获输入事件、准备创建activity、焦点切换)1. 背景本文主要针对event log中各处节点进行进程启动流程分析。//此处使用的是adb指令input tap + location的方法(具体实现可以参考)//Input.java (frameworks\base\cmds\input\src\com\android\commands\input)/原创 2017-11-02 20:04:59 · 4289 阅读 · 0 评论 -
android N进程启动流程(二)(上一个activity的暂停、进程启动、绑定进程与创建application)
android N进程启动流程(二)(上一个activity的暂停、进程启动、绑定进程与创建application)第二部分将分为:上一个activity的暂停、进程启动、绑定进程与创建application5. 上一个activity的暂停 图5.1 上一个activity的暂停接着章节3.6的startActivityUnchecked中会调用最后有调用resumeFocusedStackTo原创 2017-11-21 12:07:42 · 5736 阅读 · 0 评论 -
Android O_GO后台启动服务改动
Android O_GO后台启动服务改动1. 问题现象应用在适配Android O/GO的系统时,会发现后台启动不了服务,会报出如下异常,并强退:java.lang.RuntimeException: Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.android.原创 2017-10-26 12:07:10 · 4156 阅读 · 0 评论