Как остановить удаленный сервис - PullRequest
2 голосов
/ 09 августа 2011

Я создал сервис и деятельность.В этом упражнении у меня есть две кнопки.Один - запустить сервис, другой - остановить сервис.Я могу запустить удаленное действие, позвонив по номеру startService(), но не смог остановить службу, используя stopService().Если я нажму на кнопку «Пуск», то обнаружу, что запущен дополнительный удаленный процесс (с использованием eclipse ide).Я ожидаю, что если я нажму кнопку «Стоп», то этот дополнительный процесс остановится.но это не происходит.Я могу успешно вызвать метод запуска и остановки сервиса.Чтобы проверить код, я добавил тостовое сообщение в каждый метод запуска и остановки.Как остановить удаленный сервис?

Моя активность

public class SimpleServiceController extends Activity {

       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            Button start = (Button)findViewById(R.id.serviceButton);
            Button stop = (Button)findViewById(R.id.cancelButton);

            start.setOnClickListener(startListener);
            stop.setOnClickListener(stopListener);

       }

       private OnClickListener startListener = new OnClickListener() {
        public void onClick(View v){
            startService(new Intent(SimpleServiceController.this,SimpleService.class));
        }               
       };

       private OnClickListener stopListener = new OnClickListener() {
            public void onClick(View v){
                stopService(new Intent(SimpleServiceController.this,SimpleService.class));
            }               
          };
}

Сервис

public class SimpleService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this,"Service created ...", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show();
    }
}

Манифест

<service android:name=".SimpleService" android:process=":remote">
        </service>

1 Ответ

6 голосов
/ 09 августа 2011

В Android существует важное различие между работающей службой и работающим процессом .

служба следует за тщательно определенный жизненный цикл ;начинается, когда вызывается onStartCommand(), и заканчивается после завершения onDestroy().В течение этого срока служба может выполнять задачи или бездействовать, но она все еще работает.

Процесс может выходить за рамки срока службы службы.Как вы уже видели, процесс может продолжаться некоторое время после остановки службы. Не беспокойся об этом .Android уничтожит процесс и вернет любые ресурсы именно тогда, когда это необходимо.Сначала это определенно сбивает с толку, но как только ваша служба остановилась, вам не нужно заботиться о процессе, в котором она находилась.

Итог: , если была вызвана onDestroy,Ваш сервис остановлен.Не беспокойтесь об оставшемся процессе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...