如何将 "Chrome"(或等价物)作为线程而不是进程启动?

问题描述 投票:5回答:1

我们有一个应用程序,是用QtC++编写的,它的GUI是用HtmlCssJS编写的。它的GUI是用HtmlCssJS编写的。

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

然而,这在手机上并不奏效。因为在Android &iOS中,将浏览器作为一个独立的进程调用,会将实际的应用程序发送到后台。现在SO上的很多回答都建议使用手机的Webview,它是内置的。但是,Android中的Webview并不能满足所有设备的所有要求。而iOS的Webview根本不合格&弱。

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

我们的目的是在不影响Webview局限性的情况下,让应用处于前台。如果需要的话,可以进行源代码集成&编译。

android c++ ios qt browser
1个回答
1
投票

网络引擎是浏览器运行的驱动主体。由于chrome是基于chromium网络引擎,你需要相应地修改引擎。

Chrome浏览器对每个标签页使用进程,而Firefox使用线程代替。

Chrome架构有两个主要进程 浏览器进程渲染器流程. 浏览器用户界面在浏览器进程中运行,当你在Chrome浏览器中打开新的标签页时,每个标签页都会创建一个新的进程,称为 "浏览器进程"。渲染器流程. Renderer进程处理HTML内容的渲染。

假设你在chrome中打开了10个标签页,这将导致创建10个Renderer进程和1个浏览器进程。

为什么要为每个标签页单独设置Renderer进程?

假设在浏览互联网时,由于某些原因,某个标签页崩溃了,那么只有该渲染器进程被杀死,其他进程仍然存在。你的9个标签页仍在响应和工作.因为浏览器UI是在不同的进程中运行的。由于每个渲染器都在不同的进程中运行,共享数据的访问是很困难的(线程可以访问共享数据),这就提供了标签页之间的数据安全。


0
投票

请看一下 浏览器自定义标签. 这种方法介于WebView和在Chrome中打开外部链接之间。

据我所知,一切都发生在浏览器的进程中,但你可以通过一个特殊的服务来预热它。你也可以通过以下方式预渲染内容 mayLaunchUrl.

© www.soinside.com 2019 - 2024. All rights reserved.