为什么我的react原生应用程序在录制时在后台终止(iOS,RN 0.63.3,Expo Av 9.2.3)



你好

我的React Native应用程序出现了一个问题,当应用程序处于后台时,录音有时会神秘地终止。

这种情况只发生在录制后5到50分钟的可变时间后的约1/10的用户会话中。

其他上下文如下。

几个星期以来,我一直在思考这个问题,没有取得任何进展。如果有任何关于是什么原因导致了这个问题,或者我应该在哪里进行进一步调查的想法,我们将不胜感激。

示例场景

  1. 发布模式用户在我们的应用程序中开始录音,导航到";记录进行中";屏幕

  2. 用户返回iPhone主屏幕并锁定手机。

  3. 五分钟后,用户打开屏幕,确认橙色活动录制指示灯在状态栏中仍然可见。

  4. 又过了五分钟。用户打开屏幕,看到橙色的活动录音指示器不再可见(但这种情况只发生大约1/10次(

  5. 用户解锁手机并返回我们的应用程序。它们现在返回到主屏幕,而不是活动录制屏幕。

先前调查:

  • Bugsnag在会话期间没有为该用户捕获的错误(也没有有用的线索(。这不包括OOM错误的报告
  • Crashlytics和Xcode Organizer的崩溃日志都没有显示在神秘终止的时间窗口内有任何崩溃
  • 用户当天的Jetsam事件日志中没有提到我们的应用程序

关于录音如何在我们的应用程序中工作的信息

  • 我们录制音频并将其以大约1m的块上传到服务器
  • 音频块在尝试上传之前保存到设备,并在上传成功后删除
  • 我们使用ffmpeg在不停止录制会话的情况下提取100万块音频,以避免在后台暂停

其他用户上下文

  • 问题出现在iPad和iPhone上。未知是否发生在android上
  • 从iPhone 7到iPhone 14,新旧设备都会出现问题
  • 用户表示,该问题主要发生在低连接环境中

环境

expo-env-info 1.0.2 environment info:
System:
OS: macOS 12.3
Shell: 5.8 - /bin/zsh
Binaries:
Node: 15.13.0 - ~/.nvm/versions/node/v15.13.0/bin/node
npm: 7.7.6 - ~/.nvm/versions/node/v15.13.0/bin/npm
Watchman: 2022.03.21.00 - /opt/homebrew/bin/watchman
Managers:
CocoaPods: 1.11.2 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 21.4, iOS 15.4, macOS 12.3, tvOS 15.4, watchOS 8.5
Android SDK:
API Levels: 23, 28, 29, 30, 31
Build Tools: 29.0.2, 30.0.2, 31.0.0
System Images: android-29 | Google Play ARM 64 v8a, android-30 | Google APIs Intel x86 Atom
IDEs:
Android Studio: 2020.3 AI-203.7717.56.2031.7935034
Xcode: 13.3/13E113 - /usr/bin/xcodebuild
npmPackages:
react: 16.13.1 => 16.13.1
react-native: 0.63.3 => 0.63.3
react-native-web: ^0.16.3 => 0.16.5
npmGlobalPackages:
expo-cli: 4.3.4
Expo Workflow: bare

根本原因和解决方案

1( Mixpanel(爱他们!(iOS SDK有一个错误,偶尔会在30秒后导致后台终止

对于上下文,Mixpanel使用后台任务在每次应用程序进入后台时将事件更新刷新到服务器。此外,当后台任务在30秒后仍未完成时,iOS会自动终止应用程序。

出于某种原因,这些Mixpanel事件刷新有时超过30秒,导致应用程序终止。

2( 后台内存不足终止

当应用程序被终止时,苹果几乎没有给出任何提示。使用Embrace.io(很棒的公司!(,我能够开始从后台测量内存不足终止的发生率(BOOM(。

通过使用react本机工具进行分析,我能够发现,即使在后台,应用程序响应Firestore侦听器的重新渲染和redux操作也会导致大量CPU使用。在进入后台时终止不必要的侦听器并卸载大多数屏幕,使我们能够显著降低后台CPU使用率,提高电池效率,并实际上消除BOOM

如果有人有具体问题,我很乐意详细说明。在这个问题上花了很多时间。

相关内容

  • 没有找到相关文章

最新更新