AMS
文章平均质量分 84
ActivityManagerService相关的四大组件以及进程
AmyTan小小燕
这个作者很懒,什么都没留下…
展开
-
android U广播详解(二)
/ 用作单个进程批量分发receivers,已被丢弃// 主要逻辑所在类,包括入队、分发、结束等// 进程队列,分发广播时的单位// 之前的BroadcastQueue// 决定是否跳过分发当前receiver// 默认使用modern Queue} else {......原创 2023-10-16 21:36:37 · 1275 阅读 · 0 评论 -
android U广播详解(一)
BroadcastQueueModernImpl 的设计围绕着为设备上的每个潜在进程维护一个单独的 BroadcastProcessQueue 实例。表明用于传送到特定进程的Pending {@link BroadcastRecord} 条目队列。整个类都标记为 {@code NotThreadSafe},因为调用者有责任始终与持有的相关锁进行交互。原创 2023-10-12 21:04:09 · 1809 阅读 · 1 评论 -
Configuration Change派发到App进程
其它Activity会在下次resume的时候再触发relaunch,跟上面两个不在同一线程以及同一时间执行,如果想查找relaunch的具体原因,需要向前时间查找对应的configuration_changed的log,具体参考https://blog.csdn.net/xiaoyantan/article/details/126292133。针对Activity级别的处理,relaunch当前Activity或触发当前Actiivty回调onConfigurationChanged方法,只会发生其一。原创 2023-10-11 21:30:00 · 691 阅读 · 0 评论 -
Activity生命周期递归问题查看
这类问题一般比较难分析,符合以下情况的才有可能分析出来:能够复现并调试有问题时的堆栈以及对应的event logTaskFragment#shouldSleepActivities 方法导致递归There is a recursion among check for sleep and complete pause during sleeping关键log01-08 08:45:42.946 1941 5167 I wm_finish_activity: [0,240239432,518原创 2023-09-14 21:18:48 · 484 阅读 · 0 评论 -
进程被杀&Task被移除
forceStop时传入killPackageProcessesLSP的参数setRemoved为true,会提前将相关进程对应的Activity mark finish(避免进程又因为next top被重新拉起),等待进程死亡时去执行finish操作。当Task处于前台&Task中唯一的activity不处于onStop(可能处于onResume/onPause等)状态时,当前进程被kill查杀,当前activity会被finish导致task中因无activity而被移除。原创 2022-12-09 19:15:52 · 1254 阅读 · 0 评论 -
Activity Stop条件及原理
在遇到窗口显示相关问题时,Activity Stop慢总是被先关注到,但是很多情况下Stop慢只是问题的结果并非原因。本文阐述Activity stop需要满足的条件,帮助分析Activity stop慢的原因。原创 2022-09-22 10:09:05 · 1184 阅读 · 0 评论 -
如何分析Activity被relaunch原因
Activity莫名被relaunch了导致功能异常,本文简单明确讲述了如何查看问题原因并解决原创 2022-08-12 10:19:42 · 1625 阅读 · 0 评论 -
Service重启流程
了解什么情况下进程被杀后Service能重启?什么时候重启?不同返回值的重启有什么区别?Service重启时序图onStartCommand不同返回值有什么不同的效果?START_NOT_STICKY进程被杀后Service不会被重启 : 因为这里stopIfKilled赋值为true。START_STICKY_COMPATIBILITYService被杀死后会重启(执行了onCreate方法),但是onStartCommand方法没有被执行。START_STICKY进程被杀后S原创 2022-07-07 17:53:42 · 2634 阅读 · 0 评论 -
restartProcessIfVisible的流程
restartProcessIfVisible 方式重启当前app的进程原创 2022-06-22 20:09:29 · 284 阅读 · 0 评论 -
前台Service发展历史
启动和移除启动通常在Service的onStartCommand()方法中回调startForeground()方法,避免10s超时发生ANR。Context context = getApplicationContext();Intent intent = new Intent(...); // Build the intent for the servicecontext.startForegroundService(intent);startForeground()方法中需要传入唯一标识原创 2022-05-01 16:28:56 · 2389 阅读 · 1 评论 -
android T 后台限制
简化应用程序限制:标准化一组应用限制级别在后台设置功耗限制提供保护有效用例的机制提高及时通知的可靠性(FCM 配额)豁免重要用例(音乐、导航等)更好的工作优先级 监控并自动限制或显示滥用应用程序在后台应用程序消耗 X%(即 2%)的电池电量时,移动它到受限存储分区在 BG 和 FGS 状态下,应用程序消耗的电池电量占 Y%(即 4%)时,通过有关高功耗的通知警告用户级别无限制优化(自适应存储分区)受限存储分区(非常有限的后台工作)后台限制(无 FGS,延迟 BOOT_C.原创 2022-04-26 21:10:10 · 3975 阅读 · 0 评论 -
android T 前台Service
https://developer.android.com/about/versions/13/get用户控制: 用户在长时间运行的应用程序上获得更多透明度和控制权:前台服务仍然需要包含通知,并且应用程序必须请求权限才能显示通知。FGS 通知现在可以被用户关闭而不影响 FGS用户可以在任务管理器中查看长时间运行的应用列表任务管理器还允许用户停止应用程序通知权限介绍https://developer.android.com/reference/android/Manifest.原创 2022-04-26 20:33:05 · 2630 阅读 · 0 评论 -
Framework常用命令集合
AMS相关Activity相关功能命令AMS所有信息adb shell dumpsys activityActivity相关信息adb shell dumpsys activity activities查看当前前台焦点页面adb shell dumpsys activity a查看当前可见页面adb shell dumpsys activity a查看top页面的详细信息adb shell dumpsys activity top-resumed原创 2022-03-09 17:18:25 · 3359 阅读 · 0 评论 -
ContentProvider详解
本文基于android 12.0主要讲解的是A进程访问B进程的ContentProvider的流程进程A查询ContentProvider运行在A进程中, 主要涉及到的类如下:frameworks/base/core/java/android/content/ContentResolver.javaframeworks/base/core/java/android/app/ContextImpl$ApplicationContentResolver.javaframeworks/base/cor原创 2022-03-01 16:06:08 · 4168 阅读 · 0 评论 -
Activity生命周期基础知识
一些基础类介绍ClientTransactionItem:能够被计划和执行的客户端回调消息ActivityLifecycleItem activity生命周期回调项,是个抽象类,继承自ClientTransactionItem,每个子类有target stateClientTransaction 是个持有一系列消息的容器,可以将消息发送给客户端,包括一个callbacks列表和一个最终的生命周期状态ClientTransaction封装一系列消息的容器,由system server端构建并通过原创 2021-09-15 20:59:16 · 260 阅读 · 0 评论 -
framework 广播基础知识和常见问题
基础知识framework层广播相关的逻辑主要在AMS.java和BroadcastQueue.java中,代表一个广播的是BroadcastRecord。分类注册方式:静态注册: android manifest文件注册,常驻广播,分发慢。动态注册:代码中注册,非常驻,分发快。接收者:显示广播:指定接收方的class类型隐式广播:只指定action,uri等, android 8.0开始限制了隐式广播的接收发送方式:静态注册的广播,一律按照串行广播处理,因为可能会设计到拉原创 2021-08-30 16:55:14 · 1578 阅读 · 0 评论 -
framework层Service的基础知识和常见问题
简介framework层Service相关的逻辑主要在ActiveServices类中。分类启动方式start方式启动:onCreate() → onStartCommand() → stopService → onDestroy()bind方式启动:onCreate() → onBind() → unbindService → onUnbind() → onDestroy()运行方式(优先级)前台Service:会在通知栏显示通知,优先级较高;anr超时时间为20s后台Servi原创 2021-08-30 11:12:07 · 2448 阅读 · 0 评论 -
从系统看进程
一些常用命令进程相关命令作用命令查看lru listadb shell dumpsys activity lru查看总体进程相关信息adb shell dumpsys activity processes查看某个进程的详细信息adb shell dumpsys activity p processName查看进程的oomadb shell dumpsys activity oom内存相关命令作用命令查看历史Lmk查杀对应级别数量原创 2021-07-06 11:48:59 · 1825 阅读 · 0 评论 -
从系统看ContentProvider
查询ContentProvider : adb shell content query --uri uriCONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG 消息超时为10s,在AMS的attachApplicationLocked发出,在app端回调后在AMS的publishContentProviders中移除。若10s内未执行上述publish过程会杀掉此进程。08-17 20:21:30.081 1000 1534 1737 I am_proc_start: [0,原创 2021-07-06 10:31:44 · 1949 阅读 · 0 评论 -
从系统看Broadcast入队与分发流程
一些基本信息查看广播记录的命令:dumpsys activity broadcasts 相关结构:Registered Receivers:Receiver Resolver Table:Historical broadcasts [foreground]Historical broadcasts summary [foreground]Historical broadcasts [background]Historical broadcasts summary [background原创 2021-07-05 18:27:20 · 2843 阅读 · 1 评论 -
android如何分析进程被杀问题
查看进程被杀的3个步骤确定被杀进程的包名有人给出直接用百度搜索app对应的包名确定进程被杀的精确时间点有进程被杀时间点及原因包名,则直接用log中搜索正则表达式(gedit支持正则)am_proc_died: [0,[0-9]*,xxxx,,xxxx代表包名 ,拿到这行log的时间点以及进程pideg: 08-19 10:06:55.302 1000 1699 12137 I am_proc_died: [0,9307,com.quark.browser,905,11]如上栗子:原创 2021-07-05 15:27:58 · 32453 阅读 · 6 评论 -
android 如何分析卡顿问题
根据App包名 & uid 通过时间点附近的上下文找到App的pid下面仅举例(其他方式获取也可以)Package [com.miui.weather2] (5c2d4cd):userId=10072表示天气的uid为1007208-05 12:26:47.543 10072 26818 26818 I wm_on_create_called:[0,com.miui.weather2.ActivityWeatherMain,performCreate,86]表示天气App的uid原创 2021-07-05 14:28:25 · 2344 阅读 · 0 评论 -
Framework层分析按下返回键退出桌面流程
将Home stack移到前台并开始pause app的Activity04-12 11:18:06.601 1851 4006 I wm_finish_activity: [0,251368919,44,com.miui.gallery/.activity.HomePageActivity,app-request]04-12 11:18:06.615 1851 4006 I wm_focused_stack: [0,0,1,44,finish-top adjustFocusToNextFocusab原创 2021-07-05 10:54:02 · 1726 阅读 · 0 评论 -
Framework层Config Change流程
Framework层Config Change流程更新DisplayContent的override configurationRelaunch Or schedule configuration change处理topActivity的流程处理其他Activities的流程app端执行Relaunch或onConfigurationChanged流程Activity的重建onConfigurationChanged更新DisplayContent的override configuration// A原创 2021-07-05 10:42:22 · 1895 阅读 · 0 评论 -
从系统看Service的重启
onStartCommand返回值的区别@IntDef(flag = false, prefix = { "START_" }, value = { START_STICKY_COMPATIBILITY, START_STICKY, START_NOT_STICKY, START_REDELIVER_INTENT,})START_STICKY_COMPATIBILITYService被杀死后会重启(执行了onCreate方法),但是o原创 2021-02-24 15:48:43 · 966 阅读 · 0 评论 -
从系统看bindService的生命周期
一、简介完整的客户端生命周期:onCreate() → onBind() → unbindService → onUnbind() → onDestroy()二、bindService的流程8-12 Service的onCreate流程14-20 Service的onBind流程22-27 ServiceConnection的connected流程InnerConnection == LoadedApkServiceDispatcherServiceDispatcherServiceDisp原创 2020-07-01 16:14:52 · 987 阅读 · 0 评论 -
从系统看startService的生命周期
一、简介完整的客户端生命周期:onCreate() → onStartCommand() → stopService → onDestroy()如果存在多个client启动同一个service, 只需一个client便可以stop该服务二、startService的流程8-10 是进程不存在时才执行,且中间省略了进程创建的流程12-16 Service的onCreate流程11-17 是Service不存在时才执行,即service存在app端只用执行onStartCommand方法18-2原创 2020-07-01 16:11:45 · 1217 阅读 · 0 评论 -
从system server到app分析activity的启动过程
Activity的启动过程startActivity的流程system_server通知当前Activity进入pause状态app pause完成后通知system server resume下一个activity若进程不存在,则创建新进程system server 通知app start 下一个actiivtyapp 通知system server stop 上一个activitysystem server 通知app stop 上一个activitystartActivity的流程system_原创 2020-06-02 17:01:17 · 289 阅读 · 0 评论 -
PIP模式详述
一、进入PIP模式1、概述流程创建pip stack → 创建新的TaskRecord → activity reparent到newTask → newTask reparent到pip stack → resumeFocusedStacksTopActivitive2、时序图3、相关代码解析app端binder回调到ATMS的方法,如果有keyguard,先dismiss keyguard再进入pip// ActivityTaskManagerService@Overridepubl原创 2020-06-18 11:22:40 · 2847 阅读 · 0 评论 -
bind Service 基础
一、bind service涉及到的数据结构1、概览ServiceRecord首先针对intent,维护一个IntentBindRecord map; 在IntentBindRecord中又针对ProcessRecord,维护一个AppBindRecord的map ; 在AppBindRecord中维护一个ConnectionRecord的集合。主要结构如下图2、细节1)ConnectionRecord描述单个service的绑定,持有上一级AppBindRecord的引用,对应客户端的Ser原创 2020-06-30 19:48:11 · 840 阅读 · 0 评论 -
如何分析Activity生命周期的log
一、查看log的方向和方式涉及到Activity生命周期问题时,主要是查看event log(logcat -b events),本地可使用adb logcat-b events | grep am_涉及到某个生命周期(一般指am_on_xxx)耗时时,结合"Slow Looper main"查看是哪个消息耗时app端log的形式: am_on_xxx_called: [userId,className,reason,duration],duration是miui加上的二、常见场景的lo原创 2020-06-10 14:57:42 · 4830 阅读 · 0 评论 -
AM/WM关系梳理
Android Q类图AM关系图WM关系图Android Randroid r上wm和am几乎合并在了一起类图关系图原创 2020-06-02 17:11:49 · 1032 阅读 · 0 评论