1. When a foreground service can be killed?
Процесс, в котором размещается служба переднего плана, считается процессом переднего плана. Такой процесс считается самым важным и уничтожается последним. Из документов:
Как правило, в любой момент времени существует только несколько приоритетных процессов. Их убивают только в крайнем случае — если памяти так мало, что все они не могут продолжать работать. Как правило, в этот момент устройство достигает состояния подкачки памяти, поэтому для сохранения отзывчивости пользовательского интерфейса требуется завершение некоторых процессов переднего плана.
2. Do we need to define foreground service as START_STICKY?
Зависит от задачи, которую вы выполняете. Поскольку вы только что сказали, что служба работает постоянно, я думаю, она вам может понадобиться. Флаг имеет одинаковое значение как для обычного, так и для переднего плана. Флаг START_STICKY
указывает, что если служба перезапускается после того, как ее хост-процесс был убит, onStartCommand
службы будет вызываться с нулевым намерением. Это способ сообщить службе, что она была перезапущена.
3. Do we need to restart foreground services on android BOOt or they automatically start.
Нет. Вам необходимо зарегистрировать широковещательный приемник для Intent.ACTION_BOOT_COMPLETED. и запустите службу вручную из onReceive
.
4. How many foreground services can we start from the same application at a time.
I have read somewhere in very obsequious manner in google docs that we can nominate 3 foreground service at a time, what does that mean?
Не уверен, было бы здорово, если бы вы могли поделиться источником. Независимо от того, есть ли у вас 1 или 3 службы переднего плана, процесс, в котором она размещена, считается процессом переднего плана. Размещение нескольких служб переднего плана приводит к появлению нескольких уведомлений в строке состояния, что позволяет пользователю узнать о запущенных службах и узнать, как их остановить. Вы также можете иметь одну службу переднего плана с несколькими потоками, выполняющими разные операции.
5. As the name suggests does the foreground service interrupts the main or UI thread?
Как объяснялось выше, служба переднего плана делает процесс, на котором она размещена, приоритетным процессом, а пользователь знает об этой службе. В остальном абсолютно ничем не отличается от обычного обслуживания. Служба по умолчанию запускается в потоке пользовательского интерфейса, длительные операции должны выполняться в отдельном потоке. Если устройство имеет несколько ядерных процессоров, потоки могут или не могут работать на доступных ядрах параллельно. Вы можете прочитать этот блог, написанный @fadden. Из блога:
Иногда люди задаются вопросом, почему их многопоточное приложение не использует все доступные ядра. Обычно это происходит по двум причинам:
- Миграция потоков между ядрами обходится дорого с точки зрения производительности;
- Активация ядра ЦП стоит дорого с точки зрения батареи.
P.S. : Постоянно работающие службы всегда считаются антишаблонами в Android, поскольку они постоянно используют системные ресурсы, тем самым косвенно влияя на другие приложения. Поэтому, если вам когда-либо придется их использовать, тщательно спроектируйте их.
person
Manish Mulimani
schedule
06.09.2014