Phonegap相机Android杀死Cordova

16

我正在处理几个 Phonegap 项目。其中一些我在使用相机功能。

我遇到了这个问题(来自 Phonegap 文档):

  

Android 特殊情况

     

Android 使用意图在设备上启动相机活动以捕获图像,并且在内存较低的手机上,Cordova 活动可能会被终止。在这种情况下,当恢复 cordova 活动时,图像可能不会出现。

我在一个测试设备上经常遇到这个问题(HTC One X)。这很好,可以进行测试。

我注意到有一个替代插件:https://code.google.com/p/foreground-camera-plugin/ 用于解决此问题。但是尽可能避免使用插件...(以便轻松移植到其他平台)。 并且它只适用于 Phonegap 2.4.0,而我正在使用 Phonegap 2.9.0

我已经使用文件 URI 而不是 Data(以避免内存问题)。

我的问题是:是否有人知道 Android 何时决定终止其他活动(如 Cordova,在 Phonegap 中非常重要)。在多少可用内存时终止活动?(百分比,MB)。因此我可以提前检查并警告用户。

当然,我希望这个问题得到解决...但似乎不会很快解决...

在第一次备注之后编辑

我没有解决真正的问题的意图,我发现那真的是不可能的。这是 Android 和 Phonegap 之间的事情。我只需要知道是否可以警告用户会发生这种情况。所以用户可以在继续之前杀死其他应用程序... 那么这是什么时候发生的?当 android 认为没有足够的内存来进行此操作时会发生什么?这是我的问题。

2013 年 11 月 29 日编辑

因为AustinAllover提供的链接,我现在知道这不仅仅是一个Phonegap问题... Android相机似乎会在内存不足的情况下关闭所有Java应用程序... 所以这个问题不仅仅适用于Phonegap/Cordova...

@AustinAllover:我不认为我理解你的问题,或者你理解我的问题。在这种情况下,由于内存问题,cordova(phonegap)应用程序被Android杀死,因此没有回调。拍照后,phonegap应用程序将从头开始重新启动...对之前发生的任何事情一无所知... - michel.iamit
1
这个问题有一些有趣的答案... https://dev59.com/s2sy5IYBdhLWcg3wtwQd - user1403947
谢谢,非常有用......尽管最高评分归属于我问题中提到的插件(支持直到phonegap 2.4.0)。这个选项可能很有用:但只在开发人员测试时使用:“开发者选项”称为“不保留活动”。 - michel.iamit
目前最好的解决方案是为Android/Cordova开发自定义相机插件。如果您想要一个现成的解决方案,请参阅AustinAllover的评论。 - lifeisfoo
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
1
尝试寻找一个插件,不要启动系统相机应用程序。而是使用自定义的相机活动,仅具有有限的功能,以减少内存使用。

1
我不确定是否有一个好的答案来回答你的问题,但我会尝试。 当应用程序被杀死以释放内存时,这取决于很多因素。首要因素是相机活动需要运行的程度。 相机应用程序本身在大多数设备上(虽然有所不同)约为10MB。这是应用程序在内存中的大小,而不是运行活动时所占用的大小,后者逻辑上可能会更大。它还取决于相机本身和存储实际照片所需的内存量,假设照片在存储时约为4MB,原始文件约为20MB。这给我们一个约为30MB的上限,但这只是猜测,我稍后会自己检查并编辑它。 关于与Android相关的内存问题,您可以在此处找到一个很好的参考 https://01.org/android-ia/user-guides/android-memory-tuning-android-5.0-and-5.1。他们建议始终保留 500MB 或更多的可用内存以运行应用程序,当然这是针对您正在运行的所有应用程序,而不是针对一个特定的应用程序。

当GC开始从内存中移除应用程序时,这发生在内存的实际边界非常接近的位置,当仅剩不到5%的空闲空间时,这个值是我自己的实验经验。首先,它会杀死仍在缓存中但不再需要的应用程序,只有在最后一步才会杀死活动的应用程序。

我的假设是,在大约50MB的内存空闲下,您的应用程序将被终止,尽管我必须强调这里有许多假设,并且没有通用的方法可以告诉您每个设备、每种相机和每个Android版本的良好答案。

希望能有所帮助,但也可能无济于事。


谢谢你的回答。真正的解决方案可能需要来自安卓开发者......如果他们只是在杀死摄像头之前检查启动了哪个进程以释放内存.... 我现在没有在这个项目上工作,正如你所说,无法给出真正的答案。但你提供了一些很好的指示关于数量方面。 - michel.iamit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,