2017-10-16 3 views
2

Je dois démarrer un foreground service pour mon application afin qu'elle continue de fonctionner et qu'elle ne soit pas susceptible d'être supprimée même si l'application est en arrière-plan. C'est une méthode pour cela, startForeground. J'ai également besoin de communiquer avec le service, donc je pense que l'option la plus facile serait de lier (je prévois de le faire fonctionner dans le même processus pour pouvoir simplement renvoyer le IBinder retourné à ma classe et il suffit d'appeler des méthodes dessus). Cependant, nulle part je ne peux trouver des informations sur la liaison foreground services. En parcourant les docs et les didacticiels, j'ai trouvé que l'un des drapeaux à bindService est https://developer.android.com/reference/android/content/Context.html#BIND_NOT_FOREGROUND pour empêcher le service d'obtenir la priorité en premier plan. Cela signifie-t-il que bound service est également un foreground par défaut, et il a besoin de notifications et autres (les docs ne le mentionnent jamais, donc je suppose que non)?Les services liés sont-ils toujours au premier plan?

Si mon application utilise un service de premier plan, l'application peut-elle être supprimée en arrière-plan?

Répondre

2

Eh bien, parlons des services. Le service peut être commencé, lié et tous les deux. Ainsi, vous pouvez réellement faire startService() et faire startForeground() après, mais quand vous allez bindService(), vous pouvez supprimer la notification et rendre le service pas de premier plan (comme semble drapeau BIND_NOT_FOREGROUND pour cette situation). Le service lié n'est pas au premier plan (ils ont la priorité du composant qui limite le service). Comme je sais pour faire le service lié de premier plan, vous ne pouvez pas appeler startForeground() (cela ne fonctionnera pas, aucune notification ne sera ajoutée dans la barre d'état), de sorte que le seul moyen est de faire startService() et onStartCommand() gérer l'action qui fera seulement startForeground(). Par conséquent, par défaut, le service lié n'est pas au premier plan, vous n'avez donc pas besoin de notification. Par défaut, le service lié n'est pas au premier plan. Votre application peut être supprimée à tout moment par le système ou par l'utilisateur dans les paramètres de l'application (Force stop), mais si vous voulez que le système sache que votre service est vraiment important pour l'utilisateur et l'application, jusqu'à ce que le système ait assez de mémoire pour votre processus.