我正在开展几个Phonegap项目。在其中一些我正在使用相机功能。
我对此问题感到困惑(来自Phonegap文档):
Android Quirks
Android使用意图在设备上启动相机活动 捕获图像,以及具有低内存的手机,Cordova活动 可能会被杀死。在这种情况下,图像可能不会出现时 科尔多瓦活动恢复了。
我经常在我的一个测试设备上遇到这个问题(HTC One X)。它非常饱满,非常适合测试。
我注意到有一个替代插件:https://code.google.com/p/foreground-camera-plugin/来解决这个问题。但我尽可能地避免使用插件......(可以轻松地移植到其他平台)。 它可用于Phonegap 2.4.0,我正在使用Phonegap 2.9.0
我已经使用了文件URI而不是数据(以避免内存问题)。
我的问题是:有没有人知道Android何时决定杀死其他活动(比如Cordova,这是Phonegap非常需要的)。在什么级别的免费记忆? (百分比,MB)。所以我可以提前检查并警告用户。
当然,我希望这个问题得到解决......但似乎不会很快得到解决......
在第一次评论后进行修改
我无意解决真正的问题,我发现这不太可能。这是Android和Phonegap之间的事情。我只需要知道是否有可能警告用户这种情况会发生。因此,用户可以在继续之前杀死其他一些应用程序...那么这是什么时候发生的?什么时候android认为没有足够的内存来让这件事情继续下去?那是我的问题。
编辑2013年11月29日
由于AustinAllover提供的链接,我现在知道这不仅仅是一个Phonegap问题......如果内存太少,Android相机似乎会杀死所有Java应用程序...所以这个问题比Phonegap更通用/只有科尔多瓦......
答案 0 :(得分: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。
希望它有所帮助,恐怕没有。
答案 1 :(得分:1)
尝试找到不启动系统相机应用的插件。而是使用仅具有有限功能的自定义相机活动来减少内存使用。