React Native Image Picker导致应用程序重新启动而没有错误

时间:2020-11-10 13:10:42

标签: android react-native react-native-image-picker

我正在使用反应本机图像选择器2.3.1,反应本机0.63.3和反应16.3.1。在某些设备(三星设备,Android 10,平板电脑和手机)上使用图像选择器启动相机时,用户拍照后,本机应用程序将重新初始化自身,而不会出现任何错误或警告。行为不一致:有时,用户只能拍摄1张照片,然后应用程序将重新启动,而其他时间是在拍摄的33张照片上。该行为无法在仿真器中或在One plus或Motorola等不同设备中复制。 系统logcat日志仅显示了一些相关的细节,我可以缩小的细节是:

  • 15533-15533 /? E / com.sfsdriver:runtime_flags中设置的未知位:0x8000

  • E / InputDispatcher:通道'd0f2b6f com.sfsdriver / com.sfsdriver.MainActivity(服务器)'〜通道不可恢复,将被破坏! (可能是在该应用程序不再处于活动状态之后发生)

  • E / memtrack:无法加载memtrack模块

也有类似这样的行:7165-13038 / com.sfsdriver I / ReactNativeJNI:运行GC的JS VM收到的内存警告(压力级别:TRIM_MEMORY_COMPLETE) 当应用程序在拍照后成功返回到应用程序活动以及应用程序重新启动时,都会发生这种情况。

我还尝试使用以下react-native库:expo-image-picker,react-native-image-picker:v3.0.0-vnext.3

1 个答案:

答案 0 :(得分:0)

还原有关此问题的信息。讨论的完整历史记录可以在此处查看:https://github.com/react-native-image-picker/react-native-image-picker/issues/1502。 摘要如下:问题发生在以下设备上:已用内存接近最大可用内存,并且几乎所有启动本机新Activity的react-native库都发生此问题(expo-image-picker,react-native-crop -图像选择器等)。发生这种情况时,Android OS可以杀死后台任务以回收内存(某些专有版本的Android可以比其他人更激进地杀死后台任务)。当用户启动打开相机的新意图时,主React本机应用程序将在后台运行,并可能被Android OS杀死(并在用户返回初始应用程序时由Android OS重新创建)。终止应用程序后,所有信息都会丢失,除非您具有在后台运行时可以保持状态的机制。通常,Android OS会将最后一个Activity结果(在这种情况下,是使用相机应用程序拍摄的图像)提供给调用应用程序,在本例中是React Activity。不幸的是,当React Context被销毁并随后重新创建时,React本机如何处理此onActivity结果存在问题,可以在此处进行操作:https://github.com/facebook/react-native/issues/30277

在解决此问题之前,此问题将一直存在,主要是在内存不足的设备上。对于不希望使用高档相机选项,只是想拍照或开始录制视频的人,您可以使用React Native Camera库(https://github.com/react-native-camera/react-native-camera)来解决此问题,因为Android系统会重新创建活动。区别在于RNCamera库不会启动新的Android活动(只是将相机嵌入到您指定执行此操作的位置),这意味着即使在拍照/录制视频时,您当前的React应用程序也将保持活动状态。