- 博客(28)
- 收藏
- 关注
原创 activity可见时发生relaunch
依次启动两个activity,MainActivity和SecondActivity然后做一下横竖屏旋转此时SecondActivity发生了relaunch,但是MainActivity并没有发生relaunchfinish掉SencondActivity,此时MainActivity发生relaunch这个流程是什么样的呢?
2025-08-21 10:58:32
215
原创 Activity对应的window是什么时候销毁的?
performDestroyActivity中会回调给到用户ondestory方法。在这之后 wm.removeViewImmediate(v)将window进行移除。在ActivityThread中的handleDestroyActivity。
2025-08-17 09:17:13
233
原创 WindowState的5个状态
比如一个activity有多个window,当前window已经完成了,需要等待其他window完成的时候,这个时候就是readytoshow。他是介于COMMIT_DRAW_PENDING和HAS_DRAWN之间的一种状态。finishDrawing通知wms。
2025-08-11 09:24:23
202
原创 容器类型和buffer类型的surfaceControl
一次是在relayoutwindow的时候总结:relayoutwindow的时候创建了一个Buffer类型的SurfaceControl。
2025-08-10 21:44:32
265
原创 Activity切换到后台,surface会销毁吗
MainActivity启动SecondActivity时。MainActivity在前台时。对应的surface被销毁了。
2025-08-09 08:38:02
203
原创 WindowManage和Activity的关系
windowManager实际上是管理这个Activity下对应的windowState的;同一个应用内的两个activity分别打印WindowManager的hashcode。为每一个phoneWindow创建了一个mWindowManager对象。所以是每个Activity对应一个windowManager。每个activity都对应一个WindowManager。我们下面看一下windowManager是如何创建的。结果:两次打印的hashcode并不相等。这个概念比较容易搞混了。
2025-08-08 14:54:49
593
原创 mWindowManager.addViewdemo演示
2.这个compatFrame和frame对view的绘制有什么影响。1.这个compatFrame和frame是如何被计算出来的。
2025-08-08 14:19:01
119
原创 ActivityManager.addOnUidImportanceListener
/ 最后存入到了UidObserverController的mUidObservers中。
2025-08-06 22:18:52
313
原创 如何自己设计一个广播
静态注册的广播接收器,如果进程没有启动,那么需要把进程拉起,并通知。广播根据他的分类,我们设想一下,他需要处理哪些场景?那么你作为一个开发者会怎么设计这个广播?这个广播对应的广播接收器,有100个,且有的是静态注册的,有的是动态注册的,这100个分散在不同的进程中,并且拉起一个进程,是非常耗时的。比如我发送了一个广播,
2025-08-05 23:09:11
194
原创 Activity启动流程(不含代码)
针对以上问题,给大家一个建议,看代码要有看地图的一种思维,比如我想地位到我的老家秣陵,我需要先把地图缩小到可以看到江苏,然后再以江苏为中心放大到南京,最后放大到江宁,最后再放大到秣陵;如果你不整体去理解,就像你开车在高速上,每个地方都感觉差不多,你也不知道你自己身处何处,导致迷失自我;b.B进程还不存在的情况,则需要通过zogyte进程先创建B进程,B进程创建后,再通知SYstme进程。3.判断是否存在应用进程,不存在的话,需要创建一个应用进程。b.A进程onPause完成之后,再通知到system侧。
2025-08-05 22:29:06
537
原创 广播的知识点
注册接收器(通过Context.registerReceiver()方法):是动态地由正在运行的进程去请求注册广播。有序广播:这类广播会按照特定的顺序分发给广播接收端,每个接收端都有机会影响最终的广播“结果”,包括中止向任何剩余的接收端的分发流程。1.如果是静态注册的广播,ams在发送广播给到对应的广播接收器的时候,发现广播的接收器对应的进程没有起来的话,会先启动对应的进程。粘性广播:广播被分发给相关的接收端,且还会被广播系统缓存下来,后面一旦有接收端发起注册,就会立刻给他们发送缓存粘性广播。
2025-08-05 09:00:00
150
原创 event日志
之前做应用开发的时候,基本看的都是logcat日志,然后做sdk开发的时候,就很痛苦,因为被人使用我的sdk的过程中,会出现各式各样的问题,我们除了需要别人提供视频之外,还需要花费大量的时间和别人沟通技术的实现;作为一个开发,我们可以认为这些event日志对应的就是fwk的关键节点,了解这些日志可以帮助我们快速了解问题事件点发生了哪些事;还有其他很多的event,每个event中包含的信息量也是巨大的,"wm_"开头的是systemserver侧的处理。"wm_on"开头的是应用侧的处理。
2025-08-04 07:27:47
352
原创 Config有哪些
App可用的bounds,保存mBounds中不包含insets系统装饰的区域(Android 15上有变化);当前窗口容器(eg. Task、ActivityRecord)的bounds,包含insets,窗口相对于整个屏幕的可用区域。container能得到最大的bounds,分屏下activityRecord是半屏大小,其他场景为屏幕大小;当前容器的旋转角度,一般只和当前Container和所在的Display有关。activity类型,包括标准、桌面、最近任务、助手、息屏。1:折叠屏设备中的外屏。
2025-08-03 09:18:09
452
原创 ApplicationStartInfo讲解
触发启动的正在启动的组件类型。START_REASON_CONTENT_PROVIDER(4):因为执行 ContentProvider 的访问而启动的进程。START_REASON_LAUNCHER_RECENTS(7):因为执行 Launcher 上的历史恢复而启动的进程。STARTUP_STATE_FIRST_FRAME_DRAWN(2):表示进程已经启动并完成了第一帧的绘制。Android 16 添加了。START_REASON_BOOT_COMPLETE(2):因为执行系统启动广播而启动的进程。
2025-08-03 09:14:03
759
原创 后台启动service限制
系统不允许后台应用创建后台 Service原因分析:如果调用ActivityManager.getService().startService返回值中包含?,则抛ServiceStartNotAllowedException这个判断主要是在startServiceLocked中详细看一下getAppStartModeLOSP。
2025-08-03 06:00:00
374
原创 Service三种启动流程
另外还有两个不经常用到的:onRebind:重新bind,先startservice,在bindservice,在unbind,在bind的时候会回调。
2025-08-02 11:33:36
788
原创 forceStop流程会把对应进程的pendingIntent给cancel掉
可以看到Androidv相比于Androidu,多了一个 clearPendingIntentsForStoppedApp,即在应用被forceStop的时候,也会移除对应的pendingIntent。2.音乐类应用传入meidaButton中的pendingIntent失效,导致应用进程被杀之后,无法通过耳机拉起音乐进程。1.脑钟应用进程再被forceStop之后,如果用户不再去打开闹钟,那么闹钟到点不会响铃。首先对比Android U和Android V的代码在forceStop时候的处理。
2025-08-01 23:35:31
264
原创 通过pendingIntent启动activity被block问题
Android V上,同样满足上面这个条件的情况下,并不会就认为运行后台启动activity,而是会判断本次启动是否存在realCallUid,如果存在的话,还会有新的限制。建议在发送的时候给pendingIntent加一个opts.setPendingIntentBackgroundActivityStartMode,类似下面的写法。
2025-08-01 23:27:02
203
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人