2013-08-03 2 views
1

J'utilise le code suivant pour maintenir en vie un service:Est-ce la bonne astuce pour maintenir un service en vie même sous une faible pression de la mémoire?

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    ... 
    keepServiceAlive(this, 2222); 
    return super.onStartCommand(intent, flags, startId); 
} 
@SuppressWarnings("deprecation") 
public void keepServiceAlive(Service service, int id) { 
    Notification note = new Notification(0, null, System.currentTimeMillis()); 
    note.flags |= Notification.FLAG_NO_CLEAR;   
    service.startForeground(id, note); 
} 

Mais parfois, le service était encore tué. Pourriez-vous m'aider à confirmer l'exactitude de ce code ou préférez-vous une meilleure solution?

Répondre

1

Vous ne devez pas créer un objet Notification mal formé. Android 4.3 va maintenant montrer son propre Notification à l'utilisateur lorsqu'il détecte ce piratage et l'utilisateur sera informé que votre service est en cours d'exécution. Si vous avez vraiment besoin d'être au premier plan, donnez-lui une icône appropriée et informez vos utilisateurs de votre service, et expliquez pourquoi c'est nécessaire. Vous pourriez même envisager de leur permettre de décider si le service doit être exécuté en tant que service de premier plan via SharedPreferences.

Voir this blog post by CommonsWare

+0

Cela a du sens. Mais la question clé ici est la suivante: votre suggestion donnera-t-elle plus de possibilités de la rendre vivante en cas de mémoire insuffisante? – JackWM

+0

'startForeground()' est probablement le meilleur que vous puissiez faire. Je suppose que si vous le vouliez vraiment, vous pourriez lancer une alarme répétée qui déclenche l'intention de démarrer le service, donc si elle est détruite, elle sera redémarrée à l'alarme suivante. Je penserais sérieusement à ce que vous avez vraiment besoin de faire, parce que c'est quelque chose que l'utilisateur veut désactiver ou ne pas être si persistante. – Karakuri

Questions connexes