2015-10-20 2 views
1

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

Теперь я создаю нить из метода onReceive() (я знаю, что это не рекомендуется, и сервис должен использоваться для продления времени жизни процесса на основе onReceive()).

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

ответ

1

Все зависит от среды выполнения и ОС. Независимо от того, компилируется или интерпретируется код, это не повлияет на решение об убийстве для процесса/приложения.

Длинная версия:

Просто, чтобы очистить некоторые вещи: ART не компилятор. Это среда выполнения. dex2oat - это драйвер компилятора. И если я правильно понял ваш сценарий, трансляция доставляется в ОС, которая запускает ваше приложение. И в методе onReceive вы запускаете поток.

Приложение не может быть 100% AOT compiled. Это означает, что некоторые части будут интерпретироваться АРТ, в то время как большинство из них будет выполнено изначально, все еще АРТ. Итак, ART, это среда исполнения, которая также имеет переводчика. Решение о том, следует ли убивать или не передавать поток в обработчике широковещания, не зависит от того, выполняется ли код изначально выполненным или интерпретированным. ОС может решить убить процесс, когда память низкая, или среда выполнения прерывать ее выполнение, если она обнаруживает, что она работает вечно и т. Д.

Итак, не беспокойтесь о скомпилированном коде, просто играйте с ОС (Сервисы?).

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