Как обращаться с сервисами, которые запускаются в качестве переднего плана, когда приложение очищается от последних? - PullRequest
0 голосов
/ 05 января 2019

Мое приложение Android воспроизводит звук, в то время как приложение работает в фоновом режиме со службой, которая работает в качестве переднего плана, подобно многим другим приложениям, таким как Google Play Music, Spotify и другие приложения для воспроизведения музыки / подкаста.

Большинство проверенных мною приложений, включая Google Play Music, оставят службу включенной, даже если приложение было очищено от недавних. С другой стороны, некоторые отключат звук и закроют службу (я обнаружил, что это делает только Spotify).

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

Есть ли правильный путь здесь?

Ответы [ 7 ]

0 голосов
/ 15 января 2019
public class OnClearFromRecentService extends Service {

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d("ClearFromRecentService", "Service Started");
    return START_NOT_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    Log.d("ClearFromRecentService", "Service Destroyed");
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    Log.e("ClearFromRecentService", "END");
    //Code here
    stopSelf();
}
}

Зарегистрируйте этот сервис в Manifest.xml вот так

<service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" />

Затем запустите эту услугу в вашей деятельности

startService(new Intent(getBaseContext(), OnClearFromRecentService.class));

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

0 голосов
/ 15 января 2019

Вы делаете приложение, похожее на музыкальный проигрыватель, поэтому большую часть времени пользователь ожидал, что музыка будет воспроизводиться, даже если приложение закрыто из-за недавней задачи. Теперь вы используете службу переднего плана, поэтому будет отображаться уведомление, в этом уведомлении вы предоставляете кнопку STOP , чтобы пользователь мог остановить музыку оттуда.

Но если вы хотите, чтобы фоновая служба вашего приложения была остановлена ​​после удаления из недавней задачи,

public class CustomService extends Service {

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        super.onTaskRemoved(rootIntent);
        //stop service
        stopService(new Intent(this, CustomService.class));
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("CustomService", "Service Destroyed");
    }
}

Теперь объявите службу в AndroidMenifest.xml

<service android:name=".CustomService" android:stopWithTask="false" />

android: stopWithTask = "false" возвратит вызов на onTaskRemoved () , поэтому обработайте остановку службы там.

0 голосов
/ 13 января 2019

Оставьте его запущенным с уведомлением.

Это все во имя. По словам разработчиков Android ,

"Экран" Последние "(также называемый экраном" Обзор ", недавно список задач или последние приложения) - это пользовательский интерфейс системного уровня, который отображает список недавно Доступ к деятельности и задачам. "

Удаление задачи из этого списка просто удаляет ее из списка, а не из выполнения.

Уведомления (Конечно, под Oreo) - это место, где вы сообщаете своему пользователю, что у вас все еще работают службы. Используйте уведомление, чтобы позволить им снова открыть задачу, а затем завершить службу, как они считают нужным.

0 голосов
/ 10 января 2019

Так как это вопрос мнения, я собираюсь отдать свое мнение как разработчика, так и опытного пользователя смартфона (ну, кто не в настоящее время):

tl; dr : оставить включенным

===============================

более длинная версия

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

Тем не менее, вы упомянули, что «кажется, что пользователи ожидают, что звук остановится и уведомление исчезнет из строки состояния вместе с приложением». Я бы не воспринял все утверждение как правду, а скорее извлеку суть: пользователи хотят легко остановить свое музыкальное приложение .

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

Если вы хотите пойти еще дальше, в ваших настройках может быть возможность использовать службу переднего плана или фоновую службу - чтобы пользователю было легче понять, вы можете использовать формулировку «остановить музыку, когда последнее приложения очищаются ", следовательно, делегирование выбора вашему пользователю в соответствии с его потребностями. Это, конечно, добавило бы сложности и излишней мощности вашим пользователям, так что вам решать, нужно ли вам это.

0 голосов
/ 10 января 2019

оставить службу работающей, когда приложение очищено от недавнего, пользователь может полностью остановить звук и службу в уведомлении с помощью кнопки, например так: Вот картинка -> QQ Music

0 голосов
/ 10 января 2019

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

список последних.

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

Вы можете выполнить некоторые коды в этом методе обратного вызова и получить желаемое поведение.

0 голосов
/ 10 января 2019

вы можете использовать Сервис Ondestroy Метод, чтобы при остановке сервиса очистить ваше уведомление.

...