android之如何将 "Chrome"(或等效项)作为线程而不是进程启动

虾米姐 阅读:55 2025-01-19 22:14:33 评论:0

我们有一个应用程序,它是用 Qt/C++ 编写的。它的 GUI 在 Html/Css/JS 中。

该应用在 Chrome 和 Edge 上运行良好。在台式机上,应用程序将操作系统浏览器作为一个单独的进程调用。浏览器通过 Websocket 连接到应用程序并交换消息以用于显示目的。这很好用。

但是,这在手机中不起作用。因为将浏览器作为一个单独的进程调用,会将实际的应用程序发送到 Android 和 iOS 的后台。
现在关于 SO 的许多答案都建议使用内置的移动 webview。但是,Android 中的 Webview 并不能满足所有设备的所有要求。而 iOS Webview 简直是不合标准且薄弱的。

问题 : 有没有办法将任何类似 chrome 的浏览器作为应用程序本身的线程启动?

目的是在不影响 Webview 限制的情况下将应用程序保持在前台。如果需要,可以使用源代码集成和编译。

请您参考如下方法:

Web 引擎是浏览器运行方式的驱动体。由于 chrome 基于 chromium web 引擎,您需要相应地修改引擎。

Chrome 为每个选项卡使用进程,而 Firefox 使用线程。

Chrome架构有两个主要进程浏览器进程 渲染进程 .浏览器 UI 正在浏览器进程中运行,当您在 Chrome 浏览器中打开新选项卡时,会为每个选项卡创建一个新进程,称为 渲染进程 .渲染器进程处理您的 HTML 内容的渲染。

假设您在 chrome 中打开了 10 个选项卡,这会导致创建 10 个渲染器进程和 1 个浏览器进程。

为什么要为每个选项卡单独的 Renderer 进程?

假设在浏览互联网的任何时间点,由于某种原因,某个选项卡崩溃了,那么只有那个渲染器进程被杀死,而其他进程仍然活着。您的 9 个选项卡仍然可以响应并正常工作。
由于浏览器 UI 在不同的进程中运行。浏览器用户界面一般不会挂起,并且响应速度足够快。
由于每个渲染器作为不同的进程运行,共享数据访问很困难(线程可以访问共享数据),这提供了选项卡间数据安全性。
还有许多其他进程正在运行并有自己的目的。


标签:Android
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号