onPause () без намерения, onResume () без onCreate () - PullRequest
0 голосов
/ 15 июня 2019

Я создаю приложение, которое воспроизводит музыку в фоновом режиме с помощью сервиса.Музыка отключается, когда пользователь не находится в приложении, и отключается, когда он возвращается.Для этого я использовал методы onPause() и onResume().

Проблема в том, что каждый раз, когда пользователь входит в новое действие, музыка останавливается на секунду, а затем возобновляется, потому что на секунду текущийактивность приостановлена.другая проблема - при первом запуске действия оба onResume() и onCreate() работают, что делает мой сервис остановленным с onResume(), даже не создаваясь из onCreate() (что приводит к закрытию приложения),Есть ли способ использовать onPause() без части намерения (или другой подобный способ?)

Есть ли способ использовать onCreate() без onResume() при первом запуске?

protected void onCreate(Bundle savedInstanceState) {
    counter++;

    if (counter==1) {
        alliesSPEditor.putBoolean("isAllies", true);
        alliesSPEditor.commit();
        startService(new Intent(this,MusicService.class));
    }

@Override
protected void onPause() {
    super.onPause();
    MusicService.getMP().mute();
}

@Override
protected void onResume() {
    super.onResume();
    if (counter!=1) //because the counter is still 1, the app won't shut down this way but it will not unmute the music.
    MusicService.getMP().unMute();

}

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Я вижу несколько способов решить эту проблему:

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

Во-первых, вы устанавливаете флаг в обработчике, который запускает ваше новое действие, и проверяете в методе onPause () значение флага de, если false, ничего не делать, иначе отключите звук.

public static boolean openOtherActivity = false; 
@Override
protected void onPause() {
    super.onPause();

    if (!openOtherActivity) {
       MusicService.getMP().mute();
    }
}

Вы также можете использовать Предпочтения, если предпочитаете

Чтобы решить проблемы de onCreate () и onResume (), вы можете использовать ту же логику, создающую флаг для службзапускать и контролировать, когда нужно включить звук другими способами

public static boolean isServiceCreated = false; // In your activity that start the service
protected void onCreate(Bundle savedInstanceState) {
    counter++;

    if (counter==1) {
        alliesSPEditor.putBoolean("isAllies", true);
        alliesSPEditor.commit();
        startService(new Intent(this,MusicService.class));
        isServiceCreated = true; // set the flag to true
    }
}

OnResume() method you can check if the service is started an create your logic
0 голосов
/ 15 июня 2019

onResume() всегда вызывается после onCreate() до начала выполнения действия

См. https://developer.android.com/guide/components/activities/activity-lifecycle

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