首页 > 解决方案 > 如何阻止 Chrome 后台更新杀死我的应用程序?

问题描述

更新帖子

问题

我们有各种日志表明 Chrome 的后台更新正在杀死我们使用 webviews 的应用程序。日志都遵循类似的模式;

3034  3049 I ActivityManager: Force stopping com.android.chrome appid=10115 user=-1: installPackageLI
3034  3049 I ActivityManager: Killing 963:com.google.android.googlequicksearchbox:search/u0a80 (adj 500): stop com.android.chrome,installPackageLI
3034  3049 W ActivityManager: Scheduling restart of crashed service com.google.android.googlequicksearchbox/com.google.android.apps.gsa.shared.util.keepalive.StandaloneKeepAlive$KeepAliveService in 1000ms
3034  3049 W ActivityManager: Scheduling restart of crashed service com.google.android.googlequicksearchbox/com.google.android.apps.gsa.nowoverlayservice.DrawerOverlayService in 10999ms
3034  3049 I ActivityManager: Killing 1709:com.my.app/u0a292 (adj 0): stop com.android.chrome,installPackageLI

我在这里从另一个开发人员那里发现了类似的问题;https://seap.samsung.com/forum-topic/activitymanager-kills-our-pro-kiosk-mode-app-chrome-update。它谈到了 Knox 中提供的 API,但我无法找出是否有更多信息。理想情况下,我想要一个本机解决方案,或者可能是某种 AndroidManifest 条目来缓解这个问题。

我了解当一个应用程序依赖于另一个应用程序时,它可能需要关闭并重新启动以保持奇偶性。然而,我们的应用程序是一个全屏活动应用程序,只是在这种情况下启动,似乎很奇怪,没有办法解决这个问题。

问题

我如何才能等待我们的应用程序完成(或失去焦点)才能通过更新?我的应用程序设置中是否缺少一些可以避免此类问题的内容?也许问题在于 webview 的使用?

应用信息

我们对 webview 的依赖很可能是第 3 部分广告提供商的依赖。该应用程序是在 Unity 中制作的。我可以更改 AndroidManifest 本身或更新我们的本机版本的 Player 和主 Activity。如果需要,我也可以编写本机代码。我怀疑这对于本机应用程序来说也是一个问题。


原始帖子- 标题:识别对 Chrome 的依赖(Chrome 更新时应用被终止。

我注意到每次 Chrome 应用程序获得更新时,我的应用程序都会被终止。

Force stopping com.android.chrome appid=10145 user=-1: installPackageLI
Killing 14427:my.application.com/u0a263 (adj 200): stop com.android.chrome,installPackageLI

附注:我的应用程序中根本没有使用 Chrome 网络视图(或一般的网络视图)。

我的应用程序中的某些依赖项是否有可能使用 Web 视图,这就是我的应用程序被杀死的原因?如果是,如何检测是哪一个?如果没有,有什么可以防止这种行为吗?

标签: androidandroid-webviewkill-processandroid-chrome

解决方案


我如何才能等待我们的应用程序完成(或失去焦点)才能通过更新?

鼓声……你不能。对于任何使用 WebView(或使用某些使用 WebView 的框架或库)的应用程序来说,这都是一个长期存在的问题。看到这个错误。您的应用无法阻止 Chrome/WebView 更新;那将是一个安全问题。更新由 Play 商店安排,它不知道哪些应用程序依赖于 WebView。

我的应用程序中的某些依赖项是否有可能使用 Web 视图,这就是我的应用程序被杀死的原因?如果是,如何检测是哪一个?

试试adb logcat | grep WebViewFactory;每当应用程序开始使用 WebView 时,都会记录该字符串。

您还可以按照这些说明使用 Chrome 的开发工具检查 WebView。setWebContentsDebuggingEnabled(true)(如果您有Android 版本,则可以跳过userdebug。)这将显示您应用中的所有 WebView,以及每个 WebView 的内容。

而且,如果您在构建userdebugAndroid 时遇到麻烦,您可以在WebView 构造函数中添加堆栈跟踪。

似乎很奇怪,没有办法解决这个问题。

这不是一个很好的选择,但您可以尝试向您的应用程序添加另一个进程,并且只使用该进程中的 WebView,并在不终止主进程的情况下处理崩溃。


推荐阅读