2014-09-15 4 views
2

У меня есть двадцать маленьких расширений Dashclock, работающих на моем телефоне. Каждое расширение фактически является Сервисом, который всегда работает.Будет ли я получать ошибки OOM, если я запускаю слишком много приложений в одном и том же процессе?

В настоящее время каждый из этих расширений использует 2,5 МБ каждый для запуска, что приводит к экономии памяти примерно до 50 МБ.

Я думал, что, возможно, я мог бы оптимизировать ресурсы, если бы каждый из них работал в одном процессе. Каждый из них в настоящее время является отдельным APK и поэтому имеет свой собственный процесс.

Я не смог понять максимальный размер кучи в Android - это примерно 16 МБ за процесс или за приложение? Если я изменил файлы манифеста, чтобы все эти 20 служб выполнялись в одном и том же процессе, вызвали бы это ошибки OOM?

+0

Почему downvote без причины? Если это не является конструктивным вопросом для сообщества в его нынешнем состоянии, я бы более чем хотел его пересмотреть. –

ответ

0

Я выполнил 30 процессов в одном процессе, установив android:shareUserID и «андроид: процесс» в манифесте. Я смог запустить их правильно без ошибок OOM или ошибок загрузки классов.

Я не использовал флаг android:largeHeap в манифесте, и мое приложение теперь использует 40M памяти.

Я запускаю Cyanogenmod на Nexus 5 и не изменял никаких значений в файле build.prop. Мой размер кучи на устройстве составляет 16M.

Если у кого-то нет объяснений, почему это происходит, я считаю, что это ответ, что вы не получаете ошибок OOM, а куча-пространство - для каждого приложения, а не для каждого процесса.

0

Вы можете использовать флаг "largeHeap" в AndroidManifest, чтобы получить дополнительную память.

К сожалению, я не вижу никаких жестких цифр относительно того, сколько памяти увеличивает вашу кучу, тем более что это зависит от устройства. Вы всегда можете использовать объект getMemoryClass on the ActivityManager, чтобы ограничить количество виджетов, которые пользователь может запустить.

+0

Флаг 'largeHeap' может увеличить размер кучи до 24M (или даже немного больше на некоторых устройствах), но этого все равно будет недостаточно. Я не нашел авторитетного ответа о том, являются ли лимиты для каждого приложения или для каждого процесса. –

+0

На странице «largeHeap» говорится: «Должны ли быть созданы процессы вашего приложения с большой кучей Dalvik. Это относится ко всем процессам, созданным для приложения». Таким образом, это означает, что это зависит от процесса. Приложения могут использовать больше, но я не знаю, какой предел для каждого приложения. В худшем случае вы можете использовать NDK, у которого нет ограничения на память, но это много дополнительных усилий. –

Смежные вопросы