почему служба android остановлена ​​ОС Android? - PullRequest
0 голосов
/ 29 мая 2020

Хорошо, вот мой код, я пытаюсь создать работающую службу, даже когда приложение закрыто.

В основном действии я создал новую кнопку и вызвал startMyService (), чтобы запустить service следующим образом:

public void startMyService(View view) {
    Intent intent = new Intent(MainActivity.this, MyService.class);
    startService(intent);
}

класс обслуживания прост:

public class MyService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e("MyService", "service is running");
        final Uri uri = Settings.System.DEFAULT_RINGTONE_URI;
        final Context x =(Context) MyService.this;

        new Thread(new Runnable() {
            @Override
            public void run() {
                MediaPlayer player = MediaPlayer.create(x,uri);
                player.setLooping(true);
                player.start();
            }
        }).start(); 
            Toast.makeText(getApplicationContext(), "Service is running", Toast.LENGTH_LONG).show();

        return START_STICKY;
    }

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

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
        Log.e("MyService", "service done");
    }
}

Конечно, я добавил службу в манифест

<service android:name=".MyService" android:exported="false" android:description="@string/service_description" />

Теперь после запуска , Я нажал кнопку, чтобы запустить службу и закрыть активность, я предполагал, что musi c будет играть в фоновом режиме, но остановился сразу после закрытия активности.

Как решить эту проблему? Как сделать так, чтобы служба продолжала работать, и как заставить ее снова работать после того, как ОС android ее уничтожила?

Я знаю, что существует слишком много тем о службах android и START_STICKY

Однако, как вы видите, это не работает в коде выше, почему?

Примечание. не о воспроизведении musi c в фоновом режиме, я использовал проигрывание musi c, потому что это самый простой способ узнать, когда служба остановлена, это о том, как заставить службу продолжать работать в фоновом режиме, как и должно быть, для Например, для выполнения некоторой задачи, такой как отслеживание изменений данных с сервера.

1 Ответ

1 голос
/ 29 мая 2020

Это нормальное поведение, когда ваше приложение нацелено на android O, если вы хотите остаться своим Service, вы должны использовать startForgroundService с Notification. Прочтите здесь

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

...