В недавнем ответе я прочитал
A service does not run on its own thread, it runs on the UI thread
Это просто неправильно. A Service
- это объект (экземпляр класса). Он не работает ни на одном потоке, он не запускается вообще. Это просто «есть». Методы Service
могут работать на любом потоке, в зависимости ...
В частности, методы жизненного цикла Service
(onCreate()
, onStartCommand()
и т.д.), которые вызываются непосредственно из Android рамочным запуска на главном (UI) который может быть или не быть тем же самым потоком, который называется startService()
. Тем не менее, Service
может (и обычно делает) запускать другие фоновые потоки, сколько им нужно, для выполнения необходимой работы.
Если я называю StartService() от деятельности, будет служба запускаемые на Activity в UI Thread или это породит новый процесс с его собственным UI тему?
См. Выше. Если вы хотите, чтобы ваш Service
работал в отдельном процессе, вы можете сделать это, указав в манифесте android:process=":service"
в декларации <service>
. По умолчанию службы выполняются в том же процессе, что и другие компоненты (Activity
, BroadcastReceiver
и т. Д.) Вашего приложения.
Если это работает в потоке пользовательского интерфейса, это не значит, что риск Действия не реагируют?
Это зависит от того, что делает ваш Service
! Очевидно, что если ваш Service
выполняет большую вычислительную обработку в потоке пользовательского интерфейса, это сделает ваше приложение неприемлемым. Если ваш Service
делает ввод-вывод в потоке пользовательского интерфейса, Android обычно бросает исключения (в более поздних версиях Android). Именно по этой причине службы обычно запускают фоновые потоки для работы. Однако, если ваш Service
является легким, тогда нет причин, по которым методы вашего Service
не могут работать в потоке пользовательского интерфейса. Как я уже сказал, это зависит ...
Кто бы ни проголосовал за это, пожалуйста, оставьте комментарий по причине –