Starting window添加移除流程

流程简述

Startingwindow的创建时机在Activity的启动时。前面提到Activity的启动是需要一个空白页或者截图页面过渡的,所以在系统进程收到的Activity的启动请求时,根据不同的场景分配不同的启动窗口类型,绘制启动出口startingwindow的移除时机在activity的绘制完成之后,当Activity完成绘制之后,Startingwindow的使命页结束了,所以移除。

启动窗口Starting Window主要分为两种:SplashScreen和Snapshot,前者为冷启栈(进程可能存在,但是一定是跨栈冷起栈场景),后者为热启复用栈场景;当然还有一种none类型,比如应用内页面跳转这种就不涉及startinwindow,所以是none类型。Starting Window功能是作为页面启动的过渡预览,提升启动速度和用户体验,因为正常页面启动需要耗费300-500ms时间,如果冷起场景由于要启动进程,这个过程甚至长达1-2s,如果没有过渡页,用户体验不佳。

startingwindow的框架

系统侧

·Task

存放task的activityRecord的容器,也是处理activityRecord生命周期的主要参与者。startingwindow的启动流程起点就是task.startActivityLocked()(注:Android12之后的版本已经没有ActivityStack这个类,ActivityStack和Task统一由Task表示,因此为task.startActivityLocked())

·ActivityRecord

系统进程中的Activity,也就是窗口容器,activity窗口和启动窗口都是它的child,因此启动窗口的添加和移除都是由ActivityRecord负责。

·WindowState

系统进程中的窗口,在窗口管理系统中时空指页面大小位置等属性的基本单元。startingwindow启动中回创建一个TYPE_APPLICATION_STARTING窗口类型的WindowState。

·StartingData

抽象了startingwindow的数据模型,负责构造startingsurface。

·SplashScreenStartingData

闪屏类型启动窗口的startingData实现,封装了闪屏类型启动窗口所需要的数据,如theme,icon,windowflags等等,这些数据来源于ActivityRecord。

·SnapshotStartingData

快照类型启动窗口的startingData实现,持有了TaskSnapshot。

·StartingSurfaceController

由TaskOrganizer.java和TaskOrganizerController.java打通从系统框架到wmshell的通路,从而与wmshell侧的StartingWindowController互交。

wmshell

·StartingWindowController

startingwindow的添加和移除最终的调用都在这里

·StartingSurfaceDrawer

startingwindow的添加和移除的实现

添加流程

https://i-blog.csdnimg.cn/blog_migrate/d094d577fb8e2a29ce3f62ba596e21a6.png

移除流程

应用启动状态

应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动或热启动。在冷启动中,应用从头开始启动。在另外两种状态中,系统需要将后台运行的应用带入前台。建议您始终在假定冷启动的基础上进行优化。这样做也可以提升温启动和热启动的性能。

1、冷启动

冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应用自设备启动后或系统终止应用后首次启动。这种启动给最大限度地减少启动时间带来了最大的挑战,因为系统和应用要做的工作比在另外两种启动状态中更多。

在冷启动开始时,系统有三个任务,分别是:

·加载并启动应用。

·在启动后立即显示应用的空白启动窗口。

·创建应用进程。

系统一创建应用进程,应用进程就负责后续阶段:

·创建应用对象。

·启动主线程。

·创建主 activity。

·扩充视图。

·布局屏幕。

·执行初始绘制。

一旦应用进程完成第一次绘制,系统进程就会换掉当前显示的后台窗口,替换为主 activity。此时,用户可以开始使用应用。

2、温启动

温启动包含了在冷启动期间发生的部分操作;同时,它的开销要比热启动高。有许多潜在状态可视为温启动。例如:

·用户在退出应用后又重新启动应用。进程可能已继续运行,但应用必须通过调用 onCreate() 从头开始重新创建 activity。

·系统将您的应用从内存中逐出,然后用户又重新启动它。进程和 activity 需要重启,但传递到 onCreate() 的已保存的实例 state bundle 对于完成此任务有一定助益。

3、热启动

应用的热启动比冷启动简单得多,开销也更低。在热启动中,系统的所有工作就是将您的 activity 带到前台。只要应用的所有 activity 仍驻留在内存中,应用就不必重复执行对象初始化、布局膨胀和呈现。

但是,如果一些内存为响应内存整理事件(如 onTrimMemory())而被完全清除,则需要为了响应热启动事件而重新创建相应的对象。

热启动显示的屏幕上行为和冷启动场景相同:

在应用完成 activity 呈现之前,系统进程将显示空白屏幕。

未命名浏览器 错误 异常关闭,请尝试重启任务。 Target page, context or browser has been closed Browser logs: <launching> C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe --disable-field-trial-config --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,DialMediaRouteProvider,AcceptCHFrame,AutoExpandDetailsElement,CertificateTransparencyComponentUpdater,AvoidUnnecessaryBeforeUnloadCheckSync,Translate,HttpsUpgrades,PaintHolding --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --no-sandbox --window-position=0,0 --no-first-run --no-default-browser-check --load-extension=C:/Users/38391/AppData/Roaming/OCS Desktop/downloads/extensions/scriptcat --user-data-dir=C:\Users\38391\AppData\Roaming\OCS Desktop\userDataDirs\d535fab21db747f4957a55d17371745d --remote-debugging-pipe about:blank <launched> pid=14924 [pid=14924] <process did exit: exitCode=0, signal=null> [pid=14924] starting temporary directories cleanup Call log: - <launching> C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe --disable-field-trial-config --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --
最新发布
03-09
### Microsoft Edge 浏览器异常关闭的原因及解决方案 当遇到 Microsoft Edge 浏览器异常关闭的情况时,通常可以通过多种方法来诊断和解决问题。一种常见的原因是由于页面、上下文或浏览器本身被意外关闭而导致的任务失败。 为了更好地理解和处理这个问题,可以考虑以下几个方面: #### 1. 启用详细的日志记录功能 通过启用更详尽的日志记录选项可以帮助定位问题所在。对于基于 Chromium 的 Microsoft Edge 来说,在启动配置中加入特定命令行参数能够实现这一点。例如,可以在 `optionsLaunch` 对象里设置如下属性[^1]: ```javascript const optionsLaunch = { headless: false, devtools: false, defaultViewport: { width: 1200, height: 900 }, slowMo: 250, timeout: 0, ignoreHTTPSErrors: true, args: [ "--auto-open-devtools-for-tabs", "--enable-logging=stderr", "--v=1" ] }; ``` 这些额外的参数将会使开发工具自动打开并增加更多的调试信息到标准错误流当中去,从而有助于后续分析可能存在的问题。 #### 2. 调整默认忽略参数列表 有时,默认传递给浏览器实例的一些参数可能会引发不稳定行为。尽管尝试移除 `"--enable-automation"` 参数并未奏效,但仍建议检查其他潜在影响稳定性的参数,并适当调整它们。需要注意的是,某些参数仅适用于特定版本或环境下的 Chrome 或者 Edge 浏览器。 #### 3. 使用官方文档中的开关列表 查阅由 Peter Beverloo 维护的一份全面列出 Chromium 命令行开关的文章《List of Chromium Command Line Switches》,从中寻找适合当前场景使用的开关组合。这不仅限于简单的开启/禁用某项特性,还包括针对性能优化以及稳定性增强方面的配置。 #### 4. 更新至最新版浏览器 确保所使用的 Microsoft Edge 是最新的稳定版本。开发者团队会定期发布更新以修复已知漏洞和改进用户体验。旧版本可能存在已被修补的安全隐患或是兼容性缺陷,及时升级可减少此类风险带来的负面影响。 #### 5. 检查扩展插件冲突情况 第三方扩展程序也可能成为造成崩溃的因素之一。临时禁用所有非必要的扩展后再重新加载网页,观察是否仍然会出现同样的问题;如果是,则逐一排查直至找到罪魁祸首为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值