37 votes

La fonction "Optimisation des applications" de Samsung supprime les applications d'arrière-plan après 3 jours

Nous sommes en train de développer une application Android qui est un fitness tracker application. Il fonctionne en permanence en arrière-plan, et il fonctionne très bien sur la plupart des appareils, mais nous avons eu des problèmes avec l'application de mourir complètement sur certains appareils Samsung. Après quelques recherches, il semble que certains appareils Samsung a complètement personnalisé "App" Optimisation de la fonctionnalité (http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html), qui est en fait une (très) version primitive de la Doze fonctionnalité qui existe dans les versions ultérieures d'Android qui est fondamentalement juste meurtres, les applications, si elles n'ont pas été utilisés pour les trois jours.

Comme cette application est plus ou de moins ne fait que la journalisation, et de ne pas ouvrir l'activité, il présente un grand problème pour nous, car cette fonctionnalité est pré-activé sur de nombreux appareils Samsung. Le problème est résolu en utilisant un premier plan de service, mais c'est une masse d'une solution qui nécessite déranger l'utilisateur avec une constante de notification, et nous n'avons vraiment pas besoin de l'application pour être au premier plan, - nous sommes très bien avec la normale de gestion de l'alimentation de Android.

L'Application Samsung Optimisation de la fonction indique clairement qu'il "optimiser" les applications, si elles n'ont pas été utilisés pour les trois jours. Quelqu'un a une idée de ce que Samsung considère être "utilisé" et je peux en quelque sorte le déclencheur qui?

Côté coup de gueule: À mon avis, c'est mal mis en œuvre caractéristique qui rend le développement sur Android les plus hostiles. En plus de notre cas d'utilisation, il sera tout de messenger applications pause. Si ce n'était pas pour le fait que Facebook Messenger et Whatsapp sont programmés pour être exemptés de l'application, les utilisateurs seraient en fou parce que ce serait la rupture de leurs expériences.

7voto

Zoe Points 9634

Je suis d'accord avec vous tous, l'application samsung optimisation est une terrible fonctionnalité. Doze est beaucoup mieux.


Maintenant, ma réponse:

Je possède une S6 edge, donc je sais un peu à la façon dont il fonctionne.

Le système peut détecter si vous ouvrez une application. Samsung utilise que dans leur application d'optimisation, et d'économiser de l'énergie sur les applications qui n'ont pas été utilisés dans plus de trois jours. C'est un terrible pratiquer le bien.

Il ignore contexte-processus qui peut être critique pour les applications, et même si c'est une application que vous utilisez activement, par exemple un tracker de remise en forme, il aura des questions. Pour citer ce qu'il dit à l'intérieur de l'application d'optimisation de la liste:

"Pour économiser la batterie, les applications qui n'ont pas été utilisés pendant plus de 3 jours sera désigné pour économiser de l'énergie. Apps désigné pour économiser de l'énergie ne peut pas afficher les notifications"(il ne peut pas être tout à fait correct en bas, à chaque mot, il est traduit à partir de mon appareil en cours d'exécution avec le norvégien comme langue)

En tant que tel, les applications que:

  • Ont été réglé manuellement pour économiser de l'énergie
  • Sont réglés automatiquement pour économiser de l'énergie(3 jours ne sont pas utilisés)

Donnera des questions de fond et les processus tels.

Mais:

L'utilisateur peut définir n'importe quelle application à ne jamais enregistrer de la batterie, même après 3 jours. Donc, avec cela à l'esprit, permet de considérer

Solutions

Il existe un scénario où vous n'avez pas besoin de s'inquiéter à propos de l'application et de l'application de l'optimisation:

Lors de l'application d'optimisation est désactivé.

Recherche à part cela, il ya vraiment seulement deux choses que vous pouvez faire:

  1. Demandez des utilisateurs sur samsung pour désactiver l'optimisation de la batterie sur votre application afin de prévenir les problèmes

  2. Comme @MinaSamy suggéré, SyncAdapter et avoir un périodique de synchronisation. Vous ne savez pas si il fonctionne, comme je n'ai pas testé moi-même

et bien sûr, une troisième option qui ne peut pas vraiment être considéré comme une solution:

  1. espérons application d'optimisation est désactivé ou ignorer les questions

Maintenant,

Quelqu'un a une idée de ce que Samsung considère être "utilisé" et je peux en quelque sorte le déclencheur qui?

Comme je l'ai mentionné ci-dessus, utilisés = ouvert. De sens que si l'application est ouverte, le compte à rebours de 3 jours va redémarrer. Je ne sais pas si samsung a considéré les choses comme l'ouverture accidentelle(appuyez sur l'icône et instantanément de presse de la maison-bouton)

Sens autant que je sache, vous ne pouvez pas déclencher un événement qui permettra de le garder en vie(à moins que SyncAdapter fait le truc))

Et pour rendre les faits clairement, à partir de @Neil 's réponse:

Il semble que l'utilisateur peut le faire, donc il doit y avoir une base de données ou un paramètre quelque part qui le contrôle.

L'utilisateur d'avoir un contrôle complet sur la fonction et peut faire l'une de ces quatre options:

  • Toujours optimiser <-- Pour chaque application
  • L'optimisation automatique<-- Pour chaque application
  • Jamais optimiser <-- Pour chaque application
  • Désactiver l'application d'optimisation <-- Empêcher quoi que ce soit d'être optimisé

1voto

Neil Points 1235

Y a-t-il une raison pour laquelle vous ne pouvez pas ajouter votre service à la liste «Ne pas optimiser»?

Il semble que l'utilisateur puisse le faire, il doit donc y avoir une base de données ou un paramètre quelque part qui le contrôle.

Alternativement, si vous détectez que vous installez sur l'un des appareils, ouvrez la page d'optimisation d'activité et affichez un message disant "Ne nous optimisez pas!".

-2voto

Mohammad Haidar Points 611

À mon avis vous devriez mettre en œuvre un "Récepteur de Radiodiffusion" qui est à l'écoute d'une "Intention" et de cette "Intention" d'être Diffusée par le "Service" de "onDestroy () la méthode du "Service" parce que quand le "Système" de tuer le 'Service' cette méthode sera appelée certainement. Et lorsque le "Récepteur de Radiodiffusion" reçoit le "Intention" vous devriez commencer le "Service" de nouveau. Et pour faire la distinction entre vous arrêter le "Service" ou le "Système" de l'arrêt du 'Service' utilisation de quelques 'booléens' stockés dans SharedPreferences "puis dans le " Récepteur de Radiodiffusion' vous pouvez décider d'activer le "Service" ou pas

-3voto

Enrico Points 2439

nous sommes très bien avec la normale de gestion de l'alimentation de Android

Êtes-vous? À partir de l'Android docs

Toutefois, étant donné que l'utilisateur n'est pas directement connaissance d'un service d'arrière-plan, dans cet état, il est considéré comme un candidat valide pour tuer, et vous devriez être prêt pour cela. En particulier, de longue durée services seront de plus en plus susceptibles de tuer et sont garantis d'être tué (et redémarré le cas échéant) si ils restent commencé depuis assez longtemps.

Trois jours semble que ce serait tomber sous "longues...la garantie d'être tué".

Si le problème n'est pas que votre service est tué, mais qu'il n'est pas redémarré, vous pouvez utiliser le AlarmManager de vérifier régulièrement l'état de votre service et de redémarrer, si nécessaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X