как убедиться, что сервис не убит

1

Я пытаюсь написать музыкальный плеер на Android и пытаюсь использовать сервис для воспроизведения музыки в бесконечном цикле в фоновом режиме. И мне нужна служба для взаимодействия с действиями для управления громкостью и так далее. Вопрос в том, что если я использую служебное связующее, тогда служба, скорее всего, будет прекращена с активностью, когда активность будет в фоновом режиме. Как убедиться, что служба может продолжать работать без активности и активности, некоторые из методов службы все еще можно вызвать?

Используется ли использование переднего плана со связующим? Этот сервис не будет убит таким образом?

Спасибо заранее!

  • 0
    опубликовать свой код обслуживания. Служба будет работать всю жизнь, пока вы не убьете службу с помощью методов stopSelf () или stopService ().
Теги:
android-service
android-service-binding

2 ответа

2

Per этот приоритетный блог в блоге, единственное, что приоритетнее, чем передняя служба, - это деятельность переднего плана. Это означает, что служба переднего плана почти никогда не будет убита.

В создание документации для аудио-приложений:

Когда служба играет, она должна работать на переднем плане. Это позволяет системе знать, что служба выполняет полезную функцию и не должна быть убита, если система неактивна в памяти. Служба переднего плана должна отображать уведомление, чтобы пользователь знал об этом и мог опционально его контролировать. Обратный вызов onPlay() должен поставить службу на передний план.

0

ПРИМЕЧАНИЕ. Служба будет работать на протяжении всей жизни, пока вы не убьете службу, используя методы stopSelf() или stopService()

Проверьте, работает ли ваша служба или нет, используя метод ниже.

public static boolean isServiceRunning(String serviceClassName){
    final ActivityManager activityManager = (ActivityManager)Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);
    final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);

    for (RunningServiceInfo runningServiceInfo : services) {
        if (runningServiceInfo.service.getClassName().equals(serviceClassName)){
            return true;
        }
    }
    return false;
 }

Для приложения для музыкального плеера вам необходимо свергнуть связанный service.check this docs docs

public class MusicPlayerService extends Service {
// Binder given to clients
private final IBinder mBinder = new LocalBinder();


/**
 * Class used for the client Binder.  Because we know this service always
 * runs in the same process as its clients, we don't need to deal with IPC.
 */
public class LocalBinder extends Binder {
    MusicPlayerService getService() {
        // Return this instance of MusicPlayerService so clients can call public methods
        return MusicPlayerService.this;
    }
}

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

/** method for clients */
public void play() {

}
public void pause() {

}
public void stop() {

}

}

в вашем классе активности, объявить логическую переменную mBound,

boolean mBound;

добавить bindServiceImplementation

@Override
protected void onStart() {
    super.onStart();
    // Bind to MusicPlayerService
    Intent intent = new Intent(this, MusicPlayerService.class);
    bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
    super.onStop();
    // Unbind from the service
    if (mBound) {
        unbindService(mConnection);
        mBound = false;
    }
}

create Чтобы установить связь с классом MusicPlayerService, инициализируйте объект ServiceConnection,

  private ServiceConnection mConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName className,
            IBinder service) {
        // We've bound to MusicPlayerService, cast the IBinder and get MusicPlayerService instance
        LocalBinder binder = (LocalBinder) service;
        mService = binder.getService();
        mBound = true;
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        mBound = false;
    }
};

то вы можете вызвать общедоступные методы MusicPlayerService, как показано ниже,

  public void onButtonClick(View v) {
    if (mBound) {

        // However, if this call were something that might hang, then this request should
        // occur in a separate thread to avoid slowing down the activity performance.
       mService.play();
       mService.pause();
       mService.stop();

    }
}
  • 0
    Насколько я понимаю, если вы связываете сервис с активностью, и если активность прекращается, сервис также будет прерван.
  • 0
    да. ты прав. но на основе документов вы можете отменить привязку сервиса в методе onDestroy (). проверьте эту ссылку на документацию developer.android.com/guide/components/…
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню