Число просмотров: 0
Я работаю над несколькими проектами Phonegap. В некоторых из них я использую функции камеры.
Я озадачен этой проблемой (из документации Phonegap):
Android Quirks
Android использует намерения для запуска активности камеры на устройстве, чтобы захват изображений, а также на телефонах с низкой памятью, деятельность Кордовы может быть убит. В этом случае изображение может не отображаться, если Кордовая активность восстанавливается.
У меня проблема на одном из моих тестовых устройств постоянно (HTC One X). Это довольно полно, так хорошо, чтобы проверить это.
Я заметил, что есть альтернативный плагин: https://code.google.com/p/foreground-camera-plugin/ для этой проблемы. Но я стараюсь избегать плагинов как можно больше... (чтобы легко переноситься на другие платформы).
И это доступно до Phonegap 2.4.0, и я работаю с Phonegap 2.9.0
Я уже использую URI файла, а не данные (чтобы избежать проблемы с памятью).
Мой вопрос: кто-нибудь знает, когда Android решает убить другие действия (например, Cordova, что вполне необходимо для Phonegap). На каком уровне свободной памяти? (в процентах, МБ). Поэтому я мог проверить это заранее и предупредить пользователя.
Конечно, я надеюсь, что эта проблема будет решена... но вскоре она не будет решена.
Изменить после первого замечания
Я не намерен решать настоящую проблему, я выяснил, что это действительно невозможно. Это вещь между Android и Phonegap. Мне просто нужно знать, можно ли предупредить пользователя, что это произойдет. Таким образом, пользователь может убить некоторые другие приложения, прежде чем продолжить... Итак, когда это происходит? Когда андроид думает, что недостаточно памяти для этого? Это мой вопрос.
Редактировать 2013 29 ноября
Из-за ссылки, предоставленной AustinAllover, теперь я знаю, что это не просто проблема с Phonegap... Камера Android, похоже, убивает все приложения Java в случае нехватки памяти... поэтому вопрос более общий, чем Phonegap/Кордова только...
Ответы
Ответ 1
Не уверен, есть ли хороший ответ на ваш вопрос, но я попробую.
Это зависит от множества факторов, когда приложения удаляются в свободную память. Первым и основным фактором является то, насколько должна работать камера.
Сам приложение камеры находится на большинстве устройств (хотя оно меняется) около 10 МБ. Это размер приложения в памяти, а не размер, который требуется при запуске этой операции, что будет логически немного больше. Это также зависит от самой камеры и объема памяти, необходимой для хранения фактической фотографии, позволяет предположить, что при хранении фотография составляет около 4 МБ, а также около 20 МБ. Это дает нам приблизительный верхний предел 30 МБ для приложения, хотя это предположение, и я проверю это позже и отредактирую его.
Хорошая ссылка на память, связанную с Android, вы можете найти здесь https://01.org/android-ia/user-guides/android-memory-tuning-android-5.0-and-5.1
Они советуют всегда иметь 500 МБ или больше памяти для запуска приложений, это, конечно, для всех приложений, которые вы используете, а не для одного конкретного приложения.
Чем то, что GC начинает удалять приложения из памяти, это очень близко к фактическим границам памяти, когда менее 5% по-прежнему свободны, это значение является эмпирическим по моим собственным экспериментам. Сначала он убивает приложения, которые все еще находятся в кеше, но больше не требуется, только в качестве последнего средства он убивает приложения, которые также активны.
Мое предположение заключается в том, что ваше приложение будет убито ниже 50 МБ свободной памяти, хотя я должен подчеркнуть, что здесь есть много предположений, и нет общего способа сказать вам хороший ответ для каждого устройства с каждым видом камеры и каждой версии Android.
Надеюсь, что это поможет, боюсь, что это не так.
Ответ 2
Попробуйте найти плагин, который не запускает приложение для системной камеры. Вместо этого используйте пользовательскую активность камеры с ограниченными функциями для уменьшения использования памяти.