Question

Y a-t-il des "meilleures pratiques" pour la rédaction d'une faible consommation d'énergie fond application Symbian?

Plus précisément, est-il un moyen (c.-à-API) pour une application Symbian OS à l'allusion au sujet de son état actuel afin de réduire la consommation de la batterie? Dans Android, par exemple, il y a la notion de Wake Locks , ce qui empêche l'appareil de passer en mode veille - Y at-il quelque chose de similaire dans Symbian

EDIT: Y a-t-il des conséquences lorsque le code en cours d'exécution comme un thread séparé avec la bibliothèque ouverte C, et non comme « native » Symbian C ++, en utilisant des objets Active etc.? (Le code ouvert C bloque sur IO la plupart du temps).

Était-ce utile?

La solution

  1. Vous pouvez vérifier l'activité des utilisateurs (y) avec une méthode RTimer :: Inactivité (). De cette façon, est décrit dans Forum Nokia Wiki . Là, il est également décrit comment vous pouvez remettre le minuteur d'inactivité.
  2. Vous pouvez vérifier si l'écran de l'appareil est activé ou désactivé en utilisant l'API HAL. Voir les classes HAL et HALData. Vous pouvez utiliser appel un:

TInt displayState; HAL::Get(HALData::EDisplayState, displayState); Et le displayState tiendra soit 0 si l'affichage est éteint ou 1 dans d'autres cas.

Avec ces API, vous saurez si l'utilisateur est maintenant, vous serez en mesure de changer les comportements de votre service d'arrière-plan pour réduire sa consommation d'énergie.

Vous pouvez également utiliser l'application de Nokia Energy Profiler pour enregistrer la consommation d'énergie du combiné, avec différentes options d'économie d'énergie de votre service d'arrière-plan. Aussi s'il vous plaît se référer à Nokia Document décrivant les meilleures pratiques pour économiser l'énergie de l'appareil. Ce document est assez simple, mais néanmoins utile.

Hope this helps.

EDIT: À propos de thread séparé et Open C. Autant que je sache, Open C est juste un plug-in et en profondeur toutes les implémentations sont encore "native Symbian". Donc, pour autant que vous éviter une interrogation périodique de certaines ressources et utilisez simplement le blocage habituelle IO, votre code est tout à fait même économique sur le pouvoir que les techniques d'objets actifs Symbian standard (qui utilisent des sémaphores spécifiques Symbian fils de bloc).

Autres conseils

Je n'ai pas rencontré quelque chose de spécial dans Symbain pour maintenir l'appareil sur le mode veille. Fondamentalement, les « meilleures pratiques » seraient les mêmes que tous les appareils mobiles:

  • Ne pas attendre la boucle pour les choses, utilisez toujours ce que les services de signalisation avaialble sur la plate-forme, pour Symbain ActiveObjects / utilisateur :: WaitForXxx
  • Limiter le nombre de threads d'arrière-plan (actuellement tous les appareils mobiles ne sont encore que 1 CPU ...)
  • Ne pas accrocher sur les services système, les fermer dès que possible (ce qui est normalement ma principale décharge de la batterie dans mes applications mobiles, parfois en essayant de trouver quel service du système provoque le plus vidange de la batterie peut être une vraie douleur, WinMo est très mauvais pour cela).

Pour moi, je trouve qu'il est la plupart du temps jusqu'à un compromis entre la vie de la batterie et les performances / réactivité pour l'application. Malheureusement, le pouvoir qui semblent toujours être côté de la performance / côté réactivité et damner le drain de la batterie .....

Donner votre faible priorité d'application (voir les classes RProcess et RThread). Votre approche va vraiment dépendre de ce que fait votre demande d'arrière-plan. Ces choses consomment plus de batterie:. Radio (GSM / 3G / WIFI / BlueTooth), rétro-éclairage de l'écran, accès aux fichiers

Symbian OS essayera toujours de mettre votre application à dormir, vous n'avez pas besoin de le dire pour le faire. Assurez-vous que votre approche donne l'occasion de le mettre en veille.

Gestion de l'énergie est un problème très plus important, tout en développant l'application.

Dans Symbian cela dépend de ce que vous utilisez pour exécuter des activités d'arrière-plan.

Si vous utilisez du fil ou un contrôle ActiveX.

Pour exemple. vous développez navigateur d'application que vous voulez que le navigateur à télécharger quelque chose, alors que l'activité téléchargement devrait aller en arrière-plan et mises en chantier en mesure et quand montrer les progrès et quand il se termine, il devrait à nouveau venir à bout de l'avant.

Cela dépend de la façon dont vous gérez fil si vous utilisez du fil. Vous pouvez faire comme le thread pour faire une pause quand l'activité a pris du temps commence et quand reprendre lorsque l'activité de fond a des finitions exécution ..

En fait, c'est le très bon sujet u ont rencontré

Il y avait un minuteur d'inactivité qui pourrait être remis à zéro par l'application. Cela empêcherait l'écran d'entrer dans un mode économiseur d'écran.

Si vous utilisez les différentes fonctions asynchrones dans Symbian, votre application fonctionnera le cas échéant.

L'une de ces méthodes devrait travailler en fonction de vos besoins. Si vous décrivez ce que vous voulez obtenir plus en détail, il serait plus facile de vous aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top