我有一个特定的情况,即需要处理特定于应用程序的情况。我的应用程序是一个 ionic 视频监控应用程序,它使用 cordova 作为各种插件。它显示流式 JPEG 图像作为其功能的一部分。
我需要处理的场景:
- 如果应用进入后台,需要清理视频资源,导致视频流停止
- 如果应用在多窗口模式下运行 (Android 7.0+),它需要在拆分窗口模式下与另一个应用并排运行,即使用户正在与另一个应用交互也是如此。
- 如果应用在多窗口模式下运行并且用户实际将其切换出 View ,则需要清理视频资源
话虽如此,这里有以下困境:
如今,浏览器应用程序不会将
onStop()
作为回调。我们只得到onPause()
。这在多窗口中运行时会导致问题,因为当用户点击另一个应用程序时,我的应用程序会收到onPause()
并认为它进入后台并清除视频资源。显然,这是不可取的,观众希望视频播放继续(不是流式视频而是流式图像,所以我们这里没有 PIP 视频播放器的情况)在 JS 领域,没有办法检测多窗口模式
根据multi-window docs,现在有必要区分 stop()
和 pause()
(作为推论,resume()
和 start()
) 用于用户体验,例如播放视频。
鉴于我上述的具体要求,我得出了以下解决方案:
我已经 developed a plugin这让我可以捕获
onStop()
和onStart()
以及多窗口状态(由于另一个相关的 question 我几天前在 SO 上询问过)因此,我的方法是,如果我在 Android 上运行,我将不会捕获浏览器的
pause
和resume
事件,而只依赖于onStop ()
和onStart()
(简化了一个事件没有两个回调的过程,暂停和停止/恢复和开始)我一直在我的 android 应用程序上测试何时调用
onPause()
和何时调用onStop()
的情况。在我看来,他们总是被召集在一起。我读过 this may not be true在ActivityDialog
的情况下。根据那里的描述,这种情况似乎适合我的应用,因为我不需要清理视频资源。
有没有人发现这种方法有问题——也就是说,如果在 android 上运行,不要捕获 onPause()
浏览器事件,而是使用 cordova onStop()
?在我进行测试时,我可能会遗漏一些明显的东西,而其他人可能会建议我这样做。
关键当我的应用程序实际移动到后台并且它的 UI 不显示时,我的应用程序能够释放视频资源(因为由于某些浏览器问题,它会导致大泄漏,否则)因此重要的是我不要错过任何 Activity 。因此,我想确保为 onStop()
放弃 onPause()
不会导致遗漏情况。我还需要支持运行 Android 4.2 和 4.4 的用户,我为此使用了现已失效的人行横道库,因此我真的需要通过采用这种方法来确保,我不会寻求仅适用于现代系统的解决方案。
最佳答案
回答我自己的问题: 我已经测试这种方法一段时间了,我没有看到任何明显的问题——Android 的旧版本和新版本似乎都表现良好。
关于android - 依赖 onStop() 而不是 onPause() 进行图像流式传输 ionic-webview/cordova 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51949440/