帖子
帖子
用户
博客
课程
12下一页
返回列表 发新帖
显示全部楼层
4
帖子
0
勋章
52
Y币

[问题求助] 关于小米手机, 杀渲染进程, 不杀APP进程的问题

[复制链接]
发表于 2023-9-7 10:50:49
本帖最后由 BIP80784 于 2023-9-7 11:20 编辑

小米系统后台杀进程严重, 频繁出现杀渲染进程, 不杀 APP 进程. 造成应用进入前台, 直接白屏

开启调试模式, 会提示 JS 报错信息: system killed the rendering process to reclaim memory




1.png
为了复现这个问题, 我使用雷神模拟器, 开启 root 权限. 安装 APP 自定义 loader, 同步代码后, 使用 adb shell 的 root 权限进行模拟杀死渲染进程. 下面是找到的 app 进程和 渲染进程
673CFE45-10B3-4416-AAD3-5FED10160A4F.png

如上图所示, 我杀死 APP 启动的 webview 单独进程后, 正式版从后台进入前台就会白屏, 实际报错信息提示: system killed the rendering process to reclaim memory

想解决这个问题, 需要主 APP 进程绑定 webview 进程, 下面是AI的一些方案:


要使 Android 主 APP 进程和 WebView 进程之间建立一种依赖关系,当 WebView 进程被杀死时,主 APP 进程也随之结束,可以采用以下方法:

进程间通信(IPC):
使用 Binder 或 AIDL 实现进程间通信。主进程和 WebView 进程可以互相通知状态。当 WebView 进程被杀死时,它可以通知主进程。

使用 Service:
在 WebView 进程中运行一个绑定服务,并让主 APP 进程绑定到这个服务。当 WebView 进程被杀死时,由于服务断开,onServiceDisconnected() 将在主进程中被调用,此时你可以选择结束主进程。

监听进程死亡:
可以使用 Process.myPid() 获取进程 ID,然后周期性地检查这个进程 ID 是否还活跃。如果 WebView 进程死亡,相应的进程 ID 将不再活跃,此时可以选择结束主进程。

使用广播:
当 WebView 进程结束时,发送一个自定义的广播。主 APP 进程可以注册一个 BroadcastReceiver 来监听这个广播。一旦接收到这个广播,就执行相应的操作,例如结束自己。

自定义 WebView:
通过继承 WebView 并重写其方法,可以捕获 WebView 进程中的异常和错误。这样,当 WebView 进程出现问题时,你可以选择结束主进程。

这些方法都需要一些开发工作,而且具体实施方案可能因应用架构和需求而异。在实际应用中,你需要结合应用的具体情况来选择最合适的方法。

因为不涉及原生开发, 以上我们自己都没法实现, 不知现有 api 接口能否实现类似的功能. @技术支持


配置WKWebView页面恢复模式
字段名:WKWebViewRecoveryMode

取值范围:

reload        // 重新刷新白屏的页面。可通过api.isRecoveryMode属性判断是否是恢复模式。
rebootApp     // 热重启应用
none          // 不做处理
默认值:reload

描述:WKWebView加载的页面的渲染进程是独立于当前App的,当系统内存不足时,系统可能会结束掉该进程进行回收,从而导致该页面白屏。可通过配置此字段来刷新页面或热重启整个应用,该配置只当应用在前台运行时有效,若应用在后台时有页面白屏,则回到前台时会直接进行热重启。

配置示例:

<preference name="WKWebViewRecoveryMode" value="rebootApp"/>


试试修改这个
4
帖子
0
勋章
52
Y币
勇可可①①⑥①②⑦⑦①②① · 2023-9-7 11:22配置WKWebView页面恢复模式
字段名:WKWebViewRecoveryMode


好的, 谢谢. 我试试
BIP80784 · 2023-9-7 11:33好的, 谢谢. 我试试

好的
4
帖子
0
勋章
52
Y币

修改了 config 这个参数, 我需要重新打 自定义测试包吗
BIP80784 · 2023-9-7 18:07修改了 config 这个参数, 我需要重新打 自定义测试包吗

需要,修改配置以及添加模块,都是需要重新编译生效的
4
帖子
0
勋章
52
Y币
chyd · 2023-9-7 18:14需要,修改配置以及添加模块,都是需要重新编译生效的

好的, 怪不得. 没有效果.  不做任何处理时, 会出现一下情况

首次进入生成 process0 webview 进程;
APP 进入后台, 杀死进程后, 查看, 已经没有 webview 进程了
但是, APP 进入前台, 报完错后, 却 生成一个 process1 webview 进程. 但这个 process1 与 主APP进程 不关联, APP还是报错. 这种是正常现象吗.
4
帖子
0
勋章
52
Y币
本帖最后由 BIP80784 于 2023-9-8 08:38 编辑

重新打包后, APP 放后台, 进程杀死webview. 重新打开APP, 还是和之前表现一样. 启动了一个 process1 的渲染进程. APP 继续白屏报错.

config.xml 添加如下内容:

<preference name="WKWebViewRecoveryMode" value="rebootApp"/>

26
帖子
0
勋章
320
Y币
您好,你的问题解决了?我的还是不行
4
帖子
0
勋章
52
Y币
BIP286450 · 2023-9-11 09:41您好,你的问题解决了?我的还是不行

没有解决, 官方的方法, 搞不定. 想办法提工单处理吧.
12下一页
您需要登录后才可以回帖 登录

本版积分规则