4
votes

Comment gérer les services qui s'exécutent au premier plan lorsqu'une application est supprimée de la version récente?

Mon application Android lit de l'audio tandis que l'application s'exécute en arrière-plan avec un service qui s'exécute au premier plan, similaire à de nombreuses autres applications telles que Google Play Musique, Spotify et d'autres lecteurs de musique / applications de lecteur de podcast.

La plupart des applications que j'ai vérifiées, y compris Google Play Musique, laisseront le service en cours d'exécution même si l'application est supprimée de la version récente. D'un autre côté, certains arrêteront l'audio et fermeront le service (je n'ai trouvé que Spotify faisant cela).

Je me demande quelle est la bonne façon de gérer cela? Bien que la plupart des applications laissent le service ouvert, il semble que les utilisateurs s'attendent à ce que l'audio s'arrête et que la notification disparaisse de la barre d'état avec l'application.

Y a-t-il un bon moyen ici?


0 commentaires

6 Réponses :


1
votes

Vous pouvez consulter ce lien pour voir ce que arrive au processus lorsque l'application est supprimée de

liste récente.

Même si onTaskRemoved () est appelé, l'application n'est pas tuée dans ce cas. Le service continue d'exister. Cela peut être prouvé en allant dans le menu développeur caché pour vérifier les processus en cours.

Vous pouvez exécuter certains codes dans cette méthode de rappel et obtenir le comportement souhaité.


1 commentaires

Merci pour le lien, mais cela ne répond pas vraiment à ma question. Vous pouvez, si vous le souhaitez, arrêter le service lorsque l'application est supprimée de la version récente. Par défaut, cela ne s'arrêtera pas. La question est de savoir quel est le comportement préféré / correct, s'il y en a un.



0
votes

laissez le service en cours d'exécution lorsque l'application est effacée de la version récente, l'utilisateur peut arrêter complètement l'audio et le service dans la notification avec un bouton comme celui-ci: Voici une image -> QQ Music


0 commentaires

1
votes

Puisque c'est une question d'opinion, je vais donner le mien en tant que développeur mais aussi en tant qu'utilisateur puissant de smartphone (enfin, qui ne l'est pas de nos jours):

tl; dr : laissez-le tourner

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

version plus longue

Le but d'utiliser votre téléphone comme lecteur de musique, c'est de vous fournir de l'audio pendant que vous faites d'autres activités, comme la course, la navigation, l'envoi de SMS ou même la lecture de musique pour d'autres personnes connectées via un haut-parleur, étant le "DJ" de votre groupe. Vous utiliseriez rarement un lecteur de musique comme tâche principale et je m'attendrais à le faire lorsque vous faites quelque chose comme essayer de comprendre les paroles ou regarder le clip vidéo (et par conséquent, vous utiliseriez YouTube). Par conséquent, je pense que votre lecteur de musique devrait avoir un cycle de vie distinct du reste des activités de votre téléphone. Imaginez le cauchemar de jouer de la musique pour les autres et la musique s'arrête soudainement pendant que vous jouez avec des choses sans rapport sur votre téléphone.

Cependant, vous avez raison de mentionner que "il semble que les utilisateurs s'attendent à ce que l'audio s'arrête et que la notification disparaisse de la barre d'état avec l'application". Je ne dirais pas que l’ensemble de la déclaration est vraie, mais plutôt en extraire l’essentiel: les utilisateurs veulent arrêter leur application musicale facilement .

Dans ce sens, vous devez rendre aussi facile que possible l'arrêt de la lecture pour optimiser votre expérience utilisateur. Du haut de ma tête, j'imagine que la meilleure façon de faire serait un joli bouton "X" dans votre version de notification étendue (ou même compacte). L'utilisateur peut alors arrêter la lecture directement à partir de la barre d'état et ne pas avoir à passer par la mise en avant de l'application.

Si vous voulez aller plus loin, vous pouvez avoir une option dans vos paramètres pour utiliser un service de premier plan ou d'arrière-plan - pour que l'utilisateur comprenne plus facilement, vous pouvez utiliser des mots tels que "arrêter la musique lorsqu'elle est récente les applications sont effacées », déléguant ainsi le choix à votre utilisateur, en fonction de ses besoins. Cela, bien sûr, ajouterait de la complexité et trop de puissance à vos utilisateurs, c'est donc à vous de déterminer si vous en avez besoin.


1 commentaires

Merci pour la réponse complète! Vous m'avez convaincu que le lecteur devrait avoir un cycle de vie séparé et que les utilisateurs d'Android ne s'attendent pas nécessairement à ce que l'audio s'arrête dans ce cas, mais veulent plutôt arrêter la musique facilement, et que cela est déjà réalisé en ayant un "X" bouton dans la notification. J'aime aussi beaucoup votre idée "pas plus loin"!



1
votes

Laissez-le fonctionner, avec une notification.

Tout est dans le nom. Selon Développeurs Android ,

"L'écran Récents (également appelé écran Aperçu, récent liste des tâches ou applications récentes) est une interface utilisateur au niveau du système qui répertorie récemment activités et tâches accédées. "

Faire glisser la tâche hors de cette liste la supprime simplement de la liste, pas de l'exécution.

Les Notifications (certainement sous Oreo) vous permettent l'utilisateur sait que vous avez toujours des services en cours d'exécution. Utilisez la notification pour leur permettre de rouvrir la tâche, puis de mettre fin au service comme bon leur semble.


0 commentaires

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

0 commentaires

1
votes

Vous faites comme une application de lecteur de musique, donc la plupart du temps, l'utilisateur s'attendait à ce que la musique soit lue même si l'application est fermée à partir de la tâche récente. Maintenant que vous utilisez le service de premier plan, une notification sera affichée, dans cette notification, vous fournissez le bouton STOP , afin que l'utilisateur puisse arrêter la musique à partir de là.

Mais si vous voulez que le service d'arrière-plan de votre application soit arrêté après la suppression de la tâche récente,

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

Maintenant, déclarez le service dans AndroidMenifest.xml

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");
    }
}

android: stopWithTask = "false" donnera un rappel sur onTaskRemoved () , alors gérez le service d'arrêt là-bas.


0 commentaires