Сначала обязательно прочтите: http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle
Ключом к этому является то, что на Android процесс является просто контейнером для кода - - или, в частности, один или несколько компонентов (видов деятельности, услуг, получателей, поставщиков). По умолчанию все компоненты в .apk получают свой собственный выделенный процесс, и все они работают вместе. Это почти всегда то, что вы хотите.
Когда пользователь напрямую взаимодействует с компонентом этого процесса (это мероприятие), Android будет очень стараться, чтобы этот процесс работал, и вы не увидите его убитым, кроме чрезвычайных обстоятельств.
Когда пользователь больше не взаимодействует напрямую с процессом, он становится расходуемым по сравнению с другими процессами, как описано в справочной документации. То есть пустые процессы (без интересных компонентов) будут убиты перед процессами, выполняющими действия, которые пользователь использовал, которые будут убиты до процессов с запущенными службами. Таким образом, наличие работающего сервиса будет способствовать сохранению вашего процесса за счет других процессов.
В то же время нам необходимо хорошо работать с большим количеством приложений, выходящих за работу, часто на неопределенный срок и часто с утечками памяти. Таким образом, сервис работает все более и более долгое время, Android будет все меньше и меньше стараться продолжать свой процесс. Эффективно это означает, что он перемещается в фоновое ведро до тех пор, пока не выберет его из памяти. После этого, если служба все еще хочет запустить, то будет создан новый процесс для ее перезапуска.
Результат заключается в том, что для обычных служб, которые работают долгое время, ожидается, что их процесс будут убиты через некоторое время.Это не нужно останавливать службу; служба, которая хочет продолжить работу, сделает это, ее просто нужно будет создать в новом процессе.
Конечно, если пользователь взаимодействует с деятельностью в вашем процессе, процесс не будет убит, так как это приведет его к категории переднего плана, независимо от того, что происходит с любыми услугами в нем.
за ваш полезный ответ! так, чтобы быть более конкретным: я подклассом из приложения, и в нем я держу ссылку на свой объект службы. Когда моя служба будет убита, как я могу получить ссылку на новую? или мой объект приложения также умирает вместе, и когда он получает повторное создание экземпляра, все так же, как при первом запуске приложения? – Erdal
Когда вы убиваете что-то для памяти, весь процесс (включая объект приложения) убивается, и в этот момент в нем не выполняется код. Если служба просто уничтожается, потому что ее больше не нужно запускать, вызывается ее onDestroy(), и когда служба позже понадобится, создается новый экземпляр и вызывается onCreate(). Лично я вообще рекомендую использовать приложение; это на самом деле не дает вам ничего, кроме использования статических одноэлементных классов, и я думаю, что это создает ожидания для людей (w.r.t., если существует более традиционная модель приложения), которые на самом деле не выполняются. – hackbod
Я понимаю, что вы имеете в виду. Единственная проблема, с которой я столкнулся, заставляя меня использовать класс Application, заключалась в том, что я не хотел привязываться к Сервису из всех моих разных действий. Я связываюсь только с вызовом во время метода onCreate моего приложения, а затем все другие действия получают доступ к Сервису через мое приложение singleton. Не могли бы вы предложить что-то лучше? – Erdal