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

标签 android c++ ios qt browser

我们有一个应用程序,它是用 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 - 如何将 "Chrome"(或等效项)作为线程而不是进程启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61927200/

相关文章:

c++ - 中途开始循环

c++ - 整数转二进制,存入指定大小的整数数组:c++

java - Cordova 构建 Android 错误

objective-c - Objective-C获取数组元素?

android - Flutter Image Picker 包不工作

Android - 从 db 创建一个可绘制对象数组

c++ - 从构造函数创建 QAbstractItemModel 对象

iphone - 将最后一行移出部分并删除部分时出现奇怪的动画

android - maxSdk的权限显示为Play商店上每个应用程序更新的新权限

java - AndroidLocationPlayServiceManager 上的构建错误