2014-01-29 1 views
0

В документации по службам Android говорится: «Другой компонент приложения может запустить службу, и он будет продолжать работать в фоновом режиме, даже если пользователь переключится на другое приложение».Возвращает ли из onStopCommand услугу Android?

Давайте предположим, что Android службы порождает нить или AsyncTask в onStartCommand:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
//asyncrhonous call-1 
new SomeAsyncTask().execute(); 
//asynchronous call-2 
new Thread(new Runnable(){//some runnable}).start(); 
//shouldn't service terminate here? 
return Service.START_NOT_STICKY; 
} 

В приведенном выше коде, onStartCommand оператор возврата сразу же столкнулся, так как два заявления, прежде чем он асинхронно. Должна ли служба прекратить работу до того, как потоки, порожденные здесь, завершат их выполнение? Что делать, если они не демона?

Кроме того, поскольку службы (слегка запутанные в IntentService) выполняются в потоке пользовательского интерфейса, нам необходимо выполнить сетевые операции в отдельном потоке. Следовательно, часто может потребоваться создание асинтак или разных потоков. Может ли кто-нибудь помочь мне в понимании выполнения службы и если служба «продолжает работать в фоновом режиме»? Затем, вернувшись из onStartCommand, что он «запускает»?

ответ

2

Так мои сомнения в том, что не следует прекращать обслуживание до того, как нити породил здесь конец их исполнение

No. onStopCommand() возвращение не означает, что служба разрушается.

Если служба «продолжает работать в фоновом режиме», то после возвращения из onStartCommand, что она «запускает»?

Ничего, по умолчанию. Он просто сидит там, занимая память и являясь общей неприятностью для пользователя.

Если вы запустите услугу, вам необходимо четко определить, когда и как эта служба остановится. Служба останавливается либо сама по себе, вызывая stopSelf(), либо кто-то другой, вызывающий stopService().

+0

«Служба остановлена ​​либо сама по себе вызывает stopSelf(), либо кто-то другой вызывает stopService()». Остановить его таким образом завершает работу не-демона, который он создал? – rahulserver

+0

@rahulserver: Это зависит от того, кто «это». Темы, созданные кодом фреймворка Android, являются обязанностью кода фреймворка Android, поэтому фоновый поток, созданный «IntentService», будет остановлен, когда «IntentService» будет остановлен. Тема, созданная * you * * ваша * ответственность - код фреймворка Android ничего о них не знает. – CommonsWare

+0

«фоновый поток, созданный IntentService», это означает поток, который мы «явно» кодируем в одном из методов жизненного цикла IntentService или создаем неявно с помощью android os (рабочий поток)? – rahulserver

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