【问题标题】:Phonegap camera android kills cordovaPhonegap摄像头android杀死了科尔多瓦
【发布时间】:2013-12-14 22:08:16
【问题描述】:

我正在从事多个 Phonegap 项目。在其中一些中,我使用了相机功能。

我对这个问题感到困惑(来自 Phonegap 文档):

Android 怪癖

Android 使用 Intent 在设备上启动相机 Activity 捕获图像,在内存不足的手机上,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 更通用/仅限科尔多瓦...

【问题讨论】:

  • @AustinAllover :我不认为我理解你的问题,或者你我的问题。在这种情况下,cordova(phonegap)应用程序被 android 杀死(由于内存问题)没有回调。拍照后,phonegap应用从头开始重启……不知道在这之前发生了什么……
  • 这个问题有一些有趣的答案...stackoverflow.com/questions/8368091/…
  • 谢谢,非常有用....虽然最高评价归于我的问题中提到的插件(支持直到 phonegap 2.4.0)此选项可能有用:但仅在作为开发人员进行测试时:“开发者选项”称为“不保留活动”。
  • 目前最好的解决方案是为 Android/Cordova 开发自定义相机插件。如果您想要一个现成的解决方案,请参阅 AustinAllover 的评论。

标签: android cordova camera


【解决方案1】:

不确定您的问题是否有好的答案,但我会尝试。

当应用程序被杀死以释放内存时,这取决于很多因素。第一个也是主要的因素是相机活动需要运行多少。 相机应用程序本身在大多数设备上(尽管有所不同)大约 10MB。这是应用程序在内存中的大小,而不是运行 Activity 时所需的大小,这在逻辑上会更大一些。它还取决于相机本身和存储实际照片所需的内存量,假设存储时照片约为 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。

希望有帮助,怕没用。

【讨论】:

  • 感谢您的回答。真正的解决方案可能必须来自android开发人员......如果他们只是在杀死释放内存之前检查哪个进程启动了相机......正如你所说,现在不能在这个项目上工作,不可能给出一个真正的答案。但是你给出了一些关于金额的很好的指示。
【解决方案2】:

尝试查找不启动系统相机应用的插件。而是使用仅具有有限功能的自定义相机活动来减少内存使用量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多