跳过内容

@capgo/capacitor-webview-crash

原生WebView崩溃恢复、手动重启和长时间运行Capacitor应用的定时WebView回收

该插件在前一个Capacitor WebView 进程死亡或回收时存储一个原生标记,然后在应用恢复后将该标记暴露给下一个 JavaScript 运行时。它还可以在崩溃后从原生code重启 WebView,或者在 JavaScript 明确请求时,或者在固定时间间隔,或者在 cron 计划中 restartWebView()这有助于避免长时间会话期间的内存积累,适用于 kiosk、POS、仪表板、扫描器和标牌应用

核心能力

核心能力
  • 原生崩溃重启 - 在 iOS 或 Android 中重启 WebView 当渲染进程死亡时。
  • 定时重启 - 使用原生定时器在长时间运行的 WebView 上回收 restartIntervalMs 或墙壁时钟 restartCron.
  • 手动本地重启 - 让 JavaScript 请求一个新的本地 WebView restartWebView() 而不需要重新加载页面。
  • 类型的 Capacitor 配置 - exposing WebViewCrashPluginConfig 用于 plugins.WebViewCrashcapacitor.config.ts.
  • getPendingCrashInfo - 返回存储的本地崩溃或重启标记,或者 null 当没有任何待处理的标记时。
  • clearPendingCrashInfo - 清除存储的标记后,应用程序恢复其状态。
  • simulateCrashRecovery - 创建一个虚拟崩溃标记,以便在本地测试恢复流程。
  • addListener - 触发 webViewRestoredAfterCrash 用于崩溃标记和 webViewRestoredAfterRestart 对于任何本地重启标记。
方法描述
getPendingCrashInfo返回存储的本地崩溃或重启标记,或者 null 当没有待处理的标记时。
clearPendingCrashInfo在应用恢复其状态后清除存储的标记。
simulateCrashRecovery创建一个虚拟崩溃标记,以便在本地测试恢复流程。
restartWebView写入 reason: 'manualRestart' 并要求本地code创建一个新的 WebView。
addListener触发 webViewRestoredAfterCrashwebViewRestoredAfterRestart 当一个监听器附加并且一个匹配的标记仍然是待定的情况下。
removeAllListeners移除所有插件监听器。

该插件增强了Capacitor的 PluginsConfig 一个类型化的 WebViewCrash 配置项:

export interface WebViewCrashPluginConfig {
restartOnCrash?: boolean;
restartIntervalMs?: number;
restartCron?: string;
restartAfterCrashDelayMs?: number;
}
  • 该插件检测了WebView崩溃后的恢复。它不会防止底层崩溃。
  • 新 JavaScript 运行时是新的,所以在 WebView 之前的内存状态在这个 API 触发时已经消失了。
  • 预定重启写入 reason: 'periodicRestart';手动重启写入 reason: 'manualRestart'。在启用短重启间隔、cron 计划或调用前,保存未保存的状态。 restartWebView().
  • restartCron 使用设备本地时区的 5 个字段 cron 语法,例如 0 3 * * * 每天 03:00 重启。不要同时配置两个计划:native 初始化会在 restartCron 设置且 restartIntervalMs 大于时抛出致命配置错误。 0.
  • 在 Android 上,额外的字段,如 didCrashrendererPriorityAtExit 可能可用。
  • 在 iOS 上,插件会记录 appState 当终止的 WebView 过程被观察到时。手动和计划重启重建了 Capacitor 桥接视图以便创建一个新的 WKWebView 是创建的。

此参考资料是从 src/definitions.tscapacitor-webview-crash.

从 @capgo/capacitor-webview-crash 继续

标题:从 @capgo/capacitor-webview-crash 继续

如果您正在使用 @capgo/capacitor-webview-crash 来规划原生媒体和界面行为,连接它 使用@capgo/capacitor-webview-crash 为native能力在使用@capgo/capacitor-webview-crash 使用@capgo/capacitor-live-activities 为native能力在使用@capgo/capacitor-live-activities @capgo/capacitor-live-activities 为@capgo/capacitor-live-activities的实现细节 使用@capgo/capacitor-video-player 为native能力在使用@capgo/capacitor-video-player @capgo/capacitor-video-player 为@capgo/capacitor-video-player的实现细节