自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 android系统启动

在Boot阶段init进程通过class_start core接口启动SurafceFlinger进程,然后调用ctl.start接口通知init进程启动bootaniamtion service(开机动画)3.android启动:init进程、zygote进程(systemserver进程)、挂载文件系统、serviceManager、 SurfaceFlinger、MediaServer。2.Linux启动:kernel启动:kernel_init,完成设备驱动程序初始化。init进程号为:1。

2025-02-07 16:33:03 160

原创 抓取并解析进程的native heap

链接: https://pan.baidu.com/s/1wv6O_IiNt72qJzj7QO5eXg?pwd=sap9 提取码: sap9。使用源码中的native_heapdump_viewer.py解析脚本。通过网盘分享的文件:native_heapdump_viewer.py。可以加上symbols文件 --symbols SYMBOL_DIR。-n表示只抓取native heap。打开相关DEBUG(会影响性能)–来自百度网盘超级会员v3的分享。上层重启,不是底层重启。

2025-01-15 16:39:19 213

原创 SurfaceFlinger---应用到SF

来到cpp文件:android_view_SurfaceSession.cpp的nativeCreate。参考博文:https://juejin.cn/post/7414734191194046500。执行到WMS的addWindow的win.attach()方法。创建SurfaceSession对象。

2025-01-09 14:30:43 218

原创 WMS.addWindow详细分析

【代码】WMS.addWindow详细分析。

2025-01-08 17:27:16 211

原创 WMS创建及一些重要成员变量

在DisplayThread的handler的runWithScissors方法中通过工厂模式创建WMS对象,因此WMS是运行在android.display线程中的。WMP是一个接口,init方法在PhoneWindowManager中,PMW在andorid.ui线程中init。WindowToken作用:窗口令牌,app想要向WMS申请Window是,需要出现有效的WindowToken。DisplayThread是一个单例的前台线程,线程名为android.display。WMS的main方法。

2025-01-08 14:49:29 170

原创 Window与WindowManager(二)

执行到Activity的onResume方法后,会调用到makeVisable()方法,DecorView会真正的完成添加和显示,到这里之后Activity的视图才能被用户看到。Activity实现了Window.Callback接口,因此当Window的状态改变时,Activity的方法会进行回调。在Activity的attach方法里,系统会创建Activity所属的Window对象并为其设置回调接口。最终还是需要跨进程调用到windowmanager,传入DecorView和PhoneWindow。

2025-01-02 15:48:51 285

原创 Window与WindowManager(一)

Window:Window只是一个抽象概念,每一个Window都对应着一个View和一个ViewRootImpl,Window和View是通过ViewRootImpl建立联系,Window是以View的形式存在的。Window是分层,每一个Window都有对应的z-ordered,层级高的会覆盖在层级小的上面。Android中所有的视图都是通过Window来呈现,Window是View的直接管理者。Session对象最后调用的是WMS的addWindow完成window的添加。

2025-01-02 14:06:03 331

原创 插入SD卡后设备异常重启

但是,只发了一次ACMD41后,卡回复busy状态之后,主机就复位重新发CMD0了,正常情况应该是发送一次ACMD41,卡回复busy后,host再重复多发几次ACMD41,直到卡ACMD41的响应显示初始化完成,不处于busy状态。202407221502_ylog_重启\ap\006-0722_145915_poweron\traces\07-22_150054–anr_2024-07-22-15-00-53-958.log。这个方法调用前的log正常打印了,但是后面这个log没有打印。

2024-12-27 14:42:42 827

原创 Android进程通信(常见的四种)

Intent ContentProvider Massger Broadcast AIDL等等都需要基于Binder机制完成跨进程通信。AIDL(Android Interface Definition Language):接口描述语言,生成的代码封装了binder。在内核空间,负责各个用户进程通过Binder实现通信的内核模块成为Binder Driver。binder主线程是在进程创建时创建的,在进程销毁前不会退出。Binder线程的创建是在所在进程创建的过程中创建的。Zygote创建进程。

2024-09-20 14:38:10 422

原创 WMS启动流程梳理(基于AndroidU)

systemserver 中执行了WMS的以下方法:main。

2024-09-10 18:11:12 519

原创 Input模块流程(基于AndroidT)

一旦对应的设备上有可读的input事件,epoll_wait就会返回并待会deviceid,找到具体的device。InputManager 的构造函数中创建了InputDispatcher 和InputReader对象,并把InputDispatcher作为参数传递给InputReader对象。InputManagerService:负责InputReader 和InputDispatcher的创建,并提供policy用于events的预处理。

2024-09-05 17:57:48 1407

原创 Input流程---客户端向系统端注册

2.WindowSession.addToDisplayAsUser 通过此方法在WMS中构造服务端和客户端的InputChannel对象,并将客户端的InputChannel对象进行赋值;3.创建客户端的WindowInputEventReceiver对象,并将客户端的fd加入MessageQueue的looper监听中。在activity的Resume方法会调用,系统为其创建ViewRootImpl对象。此时客户端的InputChannel成功创建。1.创建空的InputChannel对象;

2024-08-28 15:08:31 228

原创 抓取WMS 日志Protolog

链接:https://pan.baidu.com/s/1a2imJPpEntBoAy-PoDRtcQ?(WM_DEBUG_RECENTS_ANIMATIONS TAG 这个就是需要抓取的TAG 给其使能)抓取到pb日志,使用winscope.html打开进行分析。通过百度网盘分享的文件:winscope.html。protolog log抓取及查看。–来自百度网盘超级会员V5的分享。

2024-08-27 16:16:13 224

原创 Activity界面显示到Window过程梳理

1*因此调用的是PhoneWindow的setContentView方法。调用到父类Activity的setContentView方法。走到MainActivity的onCreate方法。

2024-08-27 16:06:37 234

原创 老化休眠唤醒测试异常失败

在系统中搜索WAKE_REASON_GESTURE,可以看到有多处传入此reason的调用,其他地方调用PMS的wakeup方法,是通过PowerManager去获取并调用的,因此在PowerManager中添加堆栈打印。分析如上,看下来是在一次测试过程中,调用到了PMS的wakeup,传入的reason是WAKE_REASON_GESTURE。这里对应的是原生Setting的Display的高级设置Lift to wake。修改为默认关闭即可解决此问题。可以看到问题复现后的堆栈。版本此值是默认打开的。

2024-08-27 15:02:30 214

原创 记录一次系统短时间内发生多次ANR

查看连续几次ANR的Cpu Total值都在96% 98% 100%,iowait值并不高,且kswapd0占Top2,基本可以确认此问题是Low Memory问题。可以看到短时间内连续发生多次进程的ANR,类似于这种连续的ANR需要分析第一次的ANR原因,先解决掉第一次ANR再测试此问题是否还会再次复现。客户报的问题:后台在下载多个应用时,正常使用设备,发生"System UI isn’t responding"可以看到/proc/pressure/memory的压力值比较大。1.2这两项一般很少修改。

2024-08-19 15:31:15 490

原创 App创建后MainActivity加载到界面

item.execute 实际上调用的是LaunchActivityItem的execute方法。AppDeathRecipient定义在AMS中,实现了IBinder。AppBindData 是ActivityThread的静态内部类。Activity的attach应该做的是window相关的操作。跨进程调用的AMS的attachApplication方法。回到进程的ActivityThread。回到ActivityThread。

2024-08-17 14:45:52 272

原创 记录一次三方App ANR分析过程

1.在Monkey error中查看com.google.android.apps.adm ANR时候的cpu loading,cpu loading都比较低,大概在20%-30%,应该跟系统负载无关。2.分析了两次ANR,发现都是com.google.android.apps.adm的MainActivity的绘制存在异常,导致input超时。Monkey 测试出现多次com.google.android.apps.adm ANR。

2024-07-24 16:58:39 1321

原创 App进程创建代码分析(基于Android 14)

开机过程中已经启动ZygoteServer的runSelectLoop方法并创建ZygoteConnection。调用到Process的start方法,创建了一个ZygoteProcess对象并调用start方法。点击桌面启动一个进程(pid:5636 包名:com.example.test111)调用到ProcessList.java的startProcessLocked方法。调用到AMS的startProcess方法。

2024-07-15 17:55:43 279

原创 从系统侧设置开机三方应用自启动

2.对于没有源码的三方应用,无法直接在开机的时候直接启动创建进程,因此想到的解决方式是按照有源码的三方应用的persistent检测并创建进程的流程,强制加入需要的三方应用的信息并创建进程。1.对于有源码的三方应用,可以在/package/XXX/XXX/AndroidMannifest.xml中添加属性。以上满足了两种三方应用的开机自启动,测试再次打开应用后测试为温启动不是冷启动,满足对于打开应用速度拆帧要求。当进程设置为常驻进程后,adj的值比较高,不容易被ActivityManager kill掉。

2024-07-09 10:35:40 542

原创 移除SafeMode

移除SafeMode第一次尝试的方法是在systemui下面直接将ShutDownAction的onLongPress和onPress方法回调都执行shutdown流程。客户不同意在SystemUI目录下做此修改。尝试第二中修改方案。查看/data/system/users/0.xml文件。增加DISALLOW_SAFE_BOOT。

2024-07-09 10:32:42 236

原创 长按Power键关机流程

调用到ShutdownThread的实现方法,长按Power off传入的safeMode值为true,执行rebootSafeMode方法;最终都调用的是ShutdownThread的shutdownInner方法,若是safemode则进行弹窗提示。客户提出去除Safe Mode需求,这个是在长按Power键跳出Power off按钮,再长按Power off后会弹出Safe Mode 进入提示框,然后点击之后就会重启进入Safe Mode模式。长按到界面出现Poweroff 弹窗逻辑梳理。

2024-07-04 19:30:03 461

原创 解析Hprof文件

解析Hprof文件1.安装MemoryAnalyzer-1.15.0.20231206-win32.win32.x86_642.打开报错:Version1.8.0 of the jvm is not suitable for this product,Version17 or greater isrequired配置java位置MemoryAnalyzer.ini文件中添加:-vmC:Files。

2024-07-02 16:39:52 6070 1

原创 DropBoxManagerService源码

调用DropBoxManager的addText,进而调用到DropBoxManagerService服务。DropBoxManagerService创建。

2024-07-01 18:05:21 237

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除