Intereting Posts
Поля LinearLayout, RelativeLayout и т. Д. Работают не так, как ожидалось Можно ли просмотреть макет AppWidget в Eclipse? Можно ли записывать телефонные звонки через Android-приложение? Пользовательский ListView с Pinned Header, вызывающий Jank при настройке дополнения Как создать накладной макет при просмотре списка Модифицировать пример 2, но ошибка дисплея GsonConverterFactory «Не удается разрешить символ» Добавить новую активность в AndroidManifest? Использование пользовательского поведения для создания нескольких «опорных точек» / позиций для CollapsingToolbar Преобразование входного потока в растровое изображение Android – отключить ландшафтный режим? Android NDK с помощью скрипта ANT Требуется ли Android WebView разрешения на открытие внешних URL-адресов? Как добавить программный оттенок Пропорциональное масштабирование Android VideoView Android Gradle объединил Values.xml использует неправильное пространство имен

Каковы плюсы и минусы использования нескольких процессов в приложении android

Я пишу этот вопрос не как часть какого-либо конкретного приложения, а как часть потенциального использования для будущих приложений. Я знаю, что ответы на этот вопрос могут быть очень конкретными для приложения, но я надеюсь, что вы со мной поговорите. Я передам свое понимание как есть, и, надеюсь, вы сможете помочь мне, расширив его. Удивительно напрасно, я искал в Интернете полный обзор и не смог его найти. Очевидно, что любые ссылки на соответствующие страницы приветствуются.

Андроидное приложение по умолчанию работает в одном процессе. Каждое действие или услуга, которые вы запускаете, по умолчанию даже запускается в основном потоке. Все действия пользователя помещаются в очередь Looper основного потока, а соответствующие обратные вызовы обрабатываются в основном потоке.

Чтобы обеспечить параллелизм, потоки могут запускаться множеством разных способов: одиночными или в пулах. В этом отношении нет явной потребности в нескольких процессах. Использование нескольких процессов для параллельной работы нескольких ядер вашего устройства не требуется, так как Threads могут запускаться параллельно, возможно, даже ваш основной поток ? Но, возможно, это будет легче достичь на самом деле?

Чтобы позволить Activity или Service работать в определенном (потенциально ином) процессе, вы устанавливаете атрибут android:process в файле манифеста. Так легко реализовать?

Рамка для Android специально создана для мобильных устройств, которые, как правило, имеют ограниченную память для работы. Поэтому процессы могут быть убиты в самых разных обстоятельствах, четко изложенных здесь . До тех пор, пока вы выполняете обратные вызовы жизненного цикла в действиях и службах, например onStop или onDestroy , это не должно создавать никаких реальных проблем. Но очевидно, что раздельные части вашего приложения, используя несколько процессов, потенциально могут сохранить более важные вещи. Например, служба загрузки фона может быть сохранена (уровень 3 по важности), тогда как процесс с начальным действием, начавшим эту службу, теперь в фоновом режиме (уровень 4) может быть освобожден для своих ресурсов. Кроме того, тот факт, что вы изолируете основные функции вашего приложения, может позволить вашему устройству лучше использовать его ресурсы?

Основа Binder делает IPC довольно простой в обращении, и это то, что вы будете использовать в целом, независимо от того, на самом деле использует несколько процессов. Я думаю, что основная стоимость наличия нескольких процессов для приложения – это доступ к общим ресурсам или отправка этих ресурсов между процессами, за исключением дополнительных ресурсов, необходимых для разветвления процесса от Zygote. Интересно, действительно ли использование нескольких процессов заставит вас реализовать свое приложение по-другому?

Я думаю, что концептуально использование нескольких процессов не увеличит простоту реализации?

Чтобы обобщить преимущества множества процессов:

  • Изоляция потенциально дает более продолжительную защиту.
  • Отделение дает устройству большую маневренность при восстановлении ресурсов.
  • Повышение производительности параллелизма?

Минусы:

  • Новый процесс должен быть раздвоен из Zygote с использованием ресурсов
  • В пределах ресурсов приложения нужно будет делиться несколькими процессами, которые напрягают как устройство, так и, возможно, производительность приложения.

Основной случай использования, о котором я могу думать:

  • Используйте активность переднего плана для любых пользовательских взаимодействий и запускайте постоянно используемую связанную службу для полезной синхронизации, которая может пережить сеанс, который пользователь имеет с вашей деятельностью и / или приложением.

Если у вас есть какие-либо замечания по моему пониманию, пожалуйста, укажите это (обратите внимание на несколько вопросительных знаков в моем объяснении). Если у вас есть какие-либо плюсы и / или минусы для добавления, ответьте также, я добавлю их в список.

Solutions Collecting From Web of "Каковы плюсы и минусы использования нескольких процессов в приложении android"

Использование нескольких процессов для параллельной работы нескольких ядер вашего устройства не требуется, так как Threads могут запускаться параллельно, возможно, даже ваш основной поток?

Живые (неблокированные) потоки будут выполняться параллельно через несколько ядер автоматически.

Но, возможно, это будет легче достичь на самом деле?

Я бы рассматривал потоки проще, чем процессы, но «проще», как правило, мнение.

Например, служба загрузки фона может быть сохранена (уровень 3 по важности), тогда как процесс с начальным действием, начавшим эту службу, теперь в фоновом режиме (уровень 4) может быть освобожден для своих ресурсов.

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

Основа Binder делает IPC довольно прост в обращении, и это то, что вы будете использовать в целом, независимо от фактического использования нескольких процессов

Разработчики обычно не используют Binder напрямую. В этом нуждаются только те, кто использует связанные службы, и это довольно небольшой процент приложений для Android.

Интересно, действительно ли использование нескольких процессов заставит вас реализовать свое приложение по-другому?

Да.

Изоляция потенциально дает более продолжительную защиту

ИМХО, это не является оправданием для того, чтобы тратить ОЗУ, ЦП и батареи на несколько процессов.

Повышение производительности параллелизма?

Потоки покрывают это.

Основной случай использования, о котором я могу думать

Хотя могут быть сценарии, в которых ваш вариант использования на самом деле является чистой выгодой для пользователя, это далеко не точно. Учитывая, что вам нужно реализовать свое приложение по-разному, чтобы обрабатывать несколько процессов, использование нескольких процессов – это последний подход, а не то, что вы делаете регулярно, ИМХО.