Android-сервис убит

У меня есть служба, работающая в том же процессе, что и приложение.

Иногда ОС Android решает убить мою службу (возможно, из-за низкой памяти).

Мой вопрос: отменяет ли мое приложение вместе с Сервисом? Или как это работает?

Благодаря!

Solutions Collecting From Web of "Android-сервис убит"

Сначала обязательно прочтите: http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle

Ключом к этому является то, что на Android процесс – это просто контейнер для кода – или, в частности, один или несколько компонентов (действия, службы, получатели, поставщики). По умолчанию все компоненты в .apk получают свой собственный выделенный процесс, и все они работают вместе. Это почти всегда то, что вы хотите.

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

Когда пользователь больше не взаимодействует напрямую с процессом, он становится расходуемым по сравнению с другими процессами, как описано в ссылочной документации. То есть пустые процессы (без интересных компонентов) будут убиты до того, как будут выполняться действия, которые пользователь использовал, которые будут убиты до процессов с запущенными службами. Поэтому наличие работающего сервиса будет способствовать сохранению вашего процесса за счет других процессов.

В то же время нам нужно хорошо справляться со все большим количеством приложений, выходящих из сервисов, часто на неопределенный срок и часто с утечками памяти. Таким образом, служба работает все более и более долгое время, Android будет все меньше и меньше стараться продолжать свой процесс. Эффективно это означает, что он перемещается в фоновое ведро до тех пор, пока он не выберет из памяти. После этого, если служба все еще хочет запустить, то будет создан новый процесс для перезапуска.

Результатом является то, что для обычных служб, которые работают долгое время, ожидается, что их процесс будет убит через некоторое время. Это не нужно останавливать службу; Служба, которая хочет продолжить работу, сделает это, ее просто нужно будет создать в новом процессе.

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

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

Низкий кубик памяти не пытается уничтожить какие-либо объекты в вашем процессе, хотя диспетчер активности может вызывать onDestroy для объектов Activity, которые больше не нужны. Но это происходит как часть обычного жизненного цикла деятельности, а не из-за низких условий памяти.

(Кстати, я не понимаю, означает ли вы вообще «приложение» или ваш объект, который расширяет приложение, или вы имеете в виду ваши действия, отображающие пользовательский интерфейс.)

Приложение – это то, что имеет пользовательский интерфейс, и если вы включили службу вместе с ним, то, безусловно, он будет убит, поскольку приложения будут завершены после завершения очереди кэшированных приложений

Поэтому создайте службу отдельно от приложения или, другими словами, создайте для нее другой проект 🙂

Btw, я не опытный разработчик Android, но я думаю, что я узнал, просмотрев видеоролики жизненного цикла Android для разработчиков Google.