Невозможно завершить службу, созданную в Android, она продолжает работать после stopService. Запускаем службы следующим образом:

    Intent i = new Intent(this, MyService.class);
    startService(i);

Связанная запись манифеста:

 <service android:name=".services.MyService" ></service>

Суть MyService будет сохраняться в нескольких действиях, поэтому я не использовал IntentService:

package com.sample.app.services;

public class MyService extends Service {

public static final String TAG = MyService.class.getSimpleName();
private Handler handler;

protected void onHandleIntent(Intent intent) {


    handler.post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(getBaseContext(), "MyService Intent...  Start", Toast.LENGTH_LONG).show();
        }
    });

}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    handler = new Handler();

            myProcessing();

    //  This will cause the service to hang around
    return (START_STICKY);
}


@Override
public IBinder onBind(Intent intent) {
    return (null);
}

@Override
public void onDestroy() {
    super.onDestroy();

    }
}

В различных действиях и даже пытался это сделать в onDestroy () выше, до super.onDestroy (); выше я пробовал следующее:

        Intent i = new Intent(this, MyService.class);
    stopService(i);

MyService просто продолжает работать. Я считаю, что сервис по определению является синглтоном.

0
Peter Birdsall 23 Мар 2016 в 06:44
1
Я думаю, вы должны реализовать onDestroy и остановить весь рабочий поток в этом событии!
 – 
Khang .NT
23 Мар 2016 в 07:32
Сначала попробовал onDestroy (), не повезло.
 – 
Peter Birdsall
23 Мар 2016 в 07:36

1 ответ

Лучший ответ

Если вы хотите остановить обслуживание, вы можете сделать это двумя способами:

1) Вызовите stopself () внутри класса обслуживания.

2) Используя stopService ().

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

<service android:name=".services.MyService" android:enabled="true">
        <intent-filter android:label="@string/myService" >
            <action   android:name="custom.MY_SERVICE"/>
        </intent-filter>
    </service>

И добавьте это в свой класс обслуживания

public static final String ServiceIntent = "custom.MY_SERVICE"

А затем вы можете запустить или остановить службу, как показано ниже.

startService(new Intent(MyService.ServiceIntent));
stopService(new Intent((MyService.ServiceIntent));

Надеюсь, это будет полезно. Спасибо

4
Sumanth Jois 23 Мар 2016 в 07:25
StopSelf () не сработал, но я посмотрю, как работает фильтр намерений. Ткс.
 – 
Peter Birdsall
23 Мар 2016 в 07:35
Вы можете опубликовать свой журнал
 – 
Sumanth Jois
23 Мар 2016 в 07:36
«Сервисное намерение должно быть явным», вы можете дать мне решение, получив это исключение?
 – 
NiiLx
16 Ноя 2020 в 21:59