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

Nous développons actuellement une application Android qui est une application de suivi de conditionnement physique. Il fonctionne constamment en arrière-plan, et cela fonctionne bien sur la plupart des périphériques, mais nous avons eu des problèmes avec l'application en train de mourir complètement sur certains périphériques Samsung. Après une enquête, il semble que certains appareils Samsung disposent d'une fonctionnalité "Optimisation d'application" entièrement personnalisée ( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html ), qui Est essentiellement une version (très) primitive de la fonctionnalité Doze qui existe dans les versions ultérieures d'Android, qui fondamentalement suffit à assassiner des applications s'ils n'ont pas été utilisés pendant trois jours.

Étant donné que cette application fait plus ou moins seulement la journalisation et n'ouvre pas l'activité, elle présente un gros problème pour nous, car cette fonctionnalité est pré-activée sur de nombreux périphériques Samsung. Le problème est résolu en utilisant un service de premier plan, mais c'est un marteau d'une solution qui nécessite de perturber l'utilisateur avec une notification constante, et nous n'avons vraiment pas besoin que l'application soit au premier plan – nous sommes bien avec la puissance normale Gestion d'Android.

  • Authentification de votre client sur les points d'extrémité Cloud sans connexion au compte Google
  • Calendrier.MINUTE donnant des minutes sans début de zéro
  • GridLayout aligner les enfants dans la colonne
  • Débogage de la structure Android dans Eclipse
  • Ajout de la version des services Google Play au manifeste de votre application?
  • Erreur Transmisison de données utilisant SPP sur Bluetooth sur Android
  • La fonctionnalité d'optimisation d'application Samsung indique clairement qu'il "optimisera" les applications s'ils n'ont pas été utilisés pendant trois jours. Est-ce que quelqu'un a une idée de ce que Samsung considère comme «utilisé» et puis-je en quelque sorte déclencher cela?

    Side-rant: À mon avis, c'est une fonctionnalité mal mise en œuvre qui rend le développement sur Android plus hostile. En plus de notre cas d'utilisation, toutes les applications messenger se rompent. Si ce n'était pas le fait que Facebook Messenger et Whatsapp sont câblés pour être exemptés pour l'application, les utilisateurs vont devenir fous parce que cela romprait leurs expériences.

  • Responsabilité de l'activité / fragment d'Android pour le chargement des données
  • Java.lang.IllegalStateException: commit déjà appelé dans le pager de vue avec Tablayout
  • Comment analyser json string dans Android?
  • Créez des erreurs après avoir ajouté une activité en plein écran dans Android Studio
  • Utilisation de dispatchDraw (canvas canvas)
  • Utilisation du courrier et du mot de passe pour vous authentifier via l'API REST
  • 5 Solutions collect form web for “La fonction "Optimisation d'application" de Samsung tue les applications d'arrière-plan après 3 jours”

    Existe-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 réglage quelque part qui le contrôle.

    Sinon, si vous détectez que vous installez sur l'un des périphériques, ouvrez la page d'activité optimisée et affichez un message en disant "Ne nous optimisez pas!".

    Je suis d'accord avec vous, l'optimisation de l'application Samsung est une caractéristique terrible. Doze est beaucoup mieux.


    Maintenant pour ma réponse:

    Je possède un bord S6, donc je connais un peu la façon dont cela fonctionne.

    Le système peut détecter si vous ouvrez une application. Samsung utilise cela dans l'optimisation de ses applications et économise de l'énergie sur les applications qui n'ont pas été utilisées dans plus de trois jours. C'est pourtant une pratique terrible.

    Il ignore les processus en arrière-plan qui peuvent être critiques pour les applications, et même s'il s'agit d'une application que vous utilisez activement, par exemple un suivi de conditionnement physique, cela aura des problèmes. Pour citer ce qu'il dit dans la liste d'optimisation de l'application:

    "Pour économiser de la batterie, les applications qui n'ont pas été utilisées pendant plus de 3 jours seront désignées pour économiser de l'énergie. Les applications désignées pour économiser l'alimentation peuvent ne pas afficher les notifications" (il se peut qu'il ne soit pas exactement correct à chaque mot, il est traduit De mon appareil fonctionnant avec norvégien comme langue)

    En tant que tel, les applications qui:

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

    Rendront des problèmes avec les processus d'arrière-plan et autres.

    Mais:

    L'utilisateur peut configurer une application pour ne jamais enregistrer la batterie, même après 3 jours. Donc, dans cette optique, considérons

    Solutions

    Il existe un scénario où vous n'avez pas à vous soucier de l'optimisation de l'application et de l'application:

    Lorsque l'optimisation de l'application est désactivée.

    En regardant de côté, il n'y a vraiment que deux choses que vous pouvez faire:

    1. Demandez aux utilisateurs sur samsung de désactiver l'optimisation de la batterie sur votre application pour éviter les problèmes

    2. Comme suggéré @MinaSamy, SyncAdapter et une synchronisation périodique. Je ne sais pas si cela fonctionne, car je ne l'ai pas testé moi-même

    Et bien sur une troisième option qui ne peut pas vraiment être considérée comme une solution:

    1. L'optimisation de l'application d'espoir est désactivée ou ignore les problèmes

    À présent,

    Est-ce que quelqu'un a une idée de ce que Samsung considère comme «utilisé» et puis-je en quelque sorte déclencher cela?

    Comme je l'ai mentionné plus haut, utilisé = ouvert. Cela signifie que si l'application est ouverte, le compte à rebours de 3 jours sera redémarré. Je ne sais pas si samsung a considéré des choses telles que l'ouverture accidentelle (appuyez sur l'icône et appuyez instantanément sur le bouton d'accueil)

    Pour autant que je sache, vous ne pouvez pas déclencher un événement qui le gardera en vie (sauf si SyncAdapter fait le tour)

    Et pour rendre les faits clairs, à partir de la réponse de @Neil:

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

    L'utilisateur a un contrôle total sur la fonctionnalité et peut faire l'une de ces quatre options:

    • Toujours optimiser <- Pour chaque application
    • Optimisation automatique <- Pour chaque application
    • Ne jamais optimiser <- Pour chaque application
    • Désactiver l'optimisation de l'application <- Empêcher que tout soit optimisé

    À mon avis, vous devriez implémenter un «Récepteur de diffusion» qui écoute une «intention» personnalisée et que cette «intention» soit diffusée par le «Service» de la méthode «OnDestroy ()» du «Service» car lorsque le «Système» Tuez le «Service», cette méthode sera appelée définitivement. Et lorsque «Broadcast Receiver» reçoit l'intention, vous devez recommencer le «Service». Et pour distinguer entre vous que vous arrêtez le «Service» ou le «Système» qui arrête le «Service», utilisez quelques «booleans» stockés dans «SharedPreferences», puis dans le «Récepteur de diffusion», vous décidez d'activer le «Service» ou non

    Je suggérerais la mise en œuvre d'un SyncAdapter et la planification d'une synchronisation périodique pour démarrer votre service sur des intervalles. Je crois que de cette façon, vous vous assurerez que votre service est exécuté même s'il est tué par l'application Samsung.

    Nous sommes bien avec la gestion de l'alimentation normale d'Android

    Es tu? Des documents Android

    Cependant, comme l'utilisateur n'est pas directement au courant d'un service d'arrière-plan, dans cet état, il est considéré comme un candidat valide à tuer, et vous devriez être prêt à ce que cela se produise. En particulier, les services de longue durée seront de plus en plus susceptibles de tuer et sont censés être tués (et redémarré, le cas échéant) s'ils sont encore assez longs.

    Trois jours semble qu'il tomberait sous "long-running … garanti pour être tué".

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

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.