Время жизни процесса, который породил поток
Предположим, у меня зарегистрирован BroadcastReceiver в манифесте, и мое приложение не активно. Таким образом, новый процесс будет запущен, и метод onReceive() BroadcastReceiver будет запущен в главном потоке этого нового процесса.
Теперь я порождаю поток из метода onReceive() (я знаю, что это не рекомендуется, и Service следует использовать для продления времени жизни процесса за OnReceive()).
Мне любопытно, будет ли порожденный поток (предположим, что он будет работать неопределенно долго) поддерживать процесс? Думая о JVM, это должно произойти, поскольку JVM не будет выходить, пока не появятся активные потоки, не являющиеся демонами. А как насчет АРТ? ART - это не JVM, это компилятор, и поведение скомпилированного приложения может быть различным, например, уничтожение процесса и, следовательно, всех потоков независимо от того, работают они или нет. У кого-нибудь есть понимание этой ситуации?
1 ответ
Все зависит от среды выполнения и ОС. Скомпилированный или интерпретированный код не повлияет на решение об уничтожении процесса / приложения.
Длинная версия:
Просто чтобы прояснить некоторые вопросы:
ART не является компилятором. Это среда выполнения.
dex2oat - это драйвер компилятора. И если я правильно понял ваш сценарий, широковещательная рассылка доставляется в ОС, которая запускает ваше приложение. И в onReceive
метод вы запускаете поток.
Приложение не может быть скомпилировано на100% AOT. Это означает, что несколько частей будут интерпретированы ART, в то время как большинство будет исполняться в оригинальном виде, но все же ART. Итак, ART - это среда выполнения, в которой также есть переводчик. Решение о том, уничтожать или нет поток в обработчике широковещательной рассылки, не зависит от того, выполняется ли код по умолчанию или интерпретируется. ОС может решить убить процесс, когда памяти мало, или время выполнения прервать его выполнение, если обнаружит, что он работает вечно и т. Д.
Так что не беспокойтесь о скомпилированном коде, просто играйте хорошо с ОС (Сервисами?).