7
votes

Le service Android cesse de fonctionner après que l'application ne soit pas utilisée pendant un moment

J'ai un service pour mon application qui fonctionne bien, mais lorsqu'un utilisateur n'utilise pas son téléphone pendant 20 minutes, le service ne fonctionne plus. Y a-t-il quelque chose que je suppose faire comme sauver un état ou quelque chose, je suis perdu à ce stade. Je ne vois pas pourquoi le service de service continue à courir, je regarde dans l'application> Running Services sur mon téléphone et dit toujours sa course à pied. Toute suggestion?


0 commentaires

4 Réponses :


5
votes

J'ai fait face au même problème peu de temps. Ensuite, j'ai commencé à utiliser un service d'alarme Android. Cela a résolu mon problème. Voici un lien de référence http: // android-er.blogspot.com/2010/10/Simple-example-of-alarm-service-utilisateur.html


4 commentaires

Cette. Ne créez pas de services de course à pied. Android est libre de les tuer à volonté


Je vais essayer cela mais comment ça vous a aidé?


J'ai besoin d'aller chercher des paramètres réseau et de les poster sur le serveur périodiquement pour lequel j'ai mis en œuvre la clé USB. Maintenant, lorsque l'appareil obtient l'idéal / verrouillage de l'écran, il arrête de fonctionner ... alors j'ai reçu ce service d'alarme comme solution fonctionnelle.


Avait le même problème avec les services, que pour des périodes de temps, je devais récupérer des données et mettre à jour dans le fond, mais le service s'est toujours arrêté après quelques heures. Je vais essayer d'utiliser le premier wake_lock pour voir comment cela fonctionne avec le service et, après cela, essayez votre suggestion pour AlarmManager. On dirait que c'est la façon de le faire.



4
votes

Si vous voulez continuer à courir en arrière-plan (par exemple, téléchargez quelque chose), vous devez saisir un wakelock (http://developer.android.com/reference/andrroid/os/powermanager.html)

Aussi, regardez ce qui suit si vous vous trouvez des téléchargements en arrière-plan: http://developer.android.com/reference/andrroid/net/connectivityManager .html # getBackgroundDataseting ()


3 commentaires

Cela affectera les performances de la batterie mal et la vident très bientôt.


Vous pouvez continuer à courir en arrière-plan pendant assez longtemps si vous ne conservez pas l'affichage. La batterie est drainée principalement par l'affichage, pas la CPU. Mais il est vrai que vous ne devriez prendre qu'un wakelock si vous avez vraiment besoin, comme le téléchargement, la journalisation des données du capteur, etc.


@Szabolcsberecz J'ai également utilisé le verrou de Wake, mais je reste toujours mon service cesse de fonctionner après un jour



3
votes

Ce comportement de Android qu'un service a une durée de vie maximale de 20 minutes. Après 20 minutes, il sera automatiquement tué par Android OS. Mais je pense qu'il y a une solution. Je ne l'ai pas encore testé. La solution est: Dans votre ONSTARTCOMMAND (), mettez ce code à la fin de cette méthode retour start_sticky;


1 commentaires

Où avez-vous trouvé "Un service a une durée de vie maximale de 20 minutes". ?



4
votes

Vous pouvez utiliser le récepteur de diffusion plutôt que pour utiliser le service. Et cela peut être appelé comme le service avec Gestionnaire d'alarme. Récepteur:

public void startAlert(Context context) {
Intent call_intent = new Intent(this, CallListReceiver.class);
    PendingIntent pendingCallIntent = PendingIntent.getBroadcast(context,
            0, call_intent, 0);
    AlarmManager call_alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    call_alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            System.currentTimeMillis(), (7 * 1000), pendingCallIntent);
}


0 commentaires