Android: Vordergrunddienst vs. wakeLock

8

Ich bin relativ neu in Android, also scheint mir das, was ich frage, offensichtlich zu sein (obwohl ich alle ähnlich betitelten Fragen gelesen und ausführlich gesucht habe). Ich muss den Beschleunigungsmesser kontinuierlich über lange Zeiträume überwachen. Zwei Ansätze wurden vorgeschlagen:

1) Erwerben einer partiellen Wake-Sperre, die die gesamte Zeit gehalten wird, die der Accelerometer überwacht wird; und

2) Überwachen Sie den Beschleunigungssensor in einem Vordergrunddienst.

Der erste Ansatz scheint eine Menge Akkulaufzeit zu verbrauchen. Der zweite Ansatz sollte zu einem Service führen, der nur selten getötet wird, aber ich bin mir nicht sicher, was "selten" bedeutet. Welcher Ansatz sollte verwendet werden und gibt es Alternativen, die ich berücksichtigen sollte?

    
Doug 01.02.2012, 22:56
quelle

2 Antworten

5

Ein WakeLock und ein Vordergrund Service sind nicht wirklich verwandt und sollten nicht verglichen werden, in welche Richtung es am besten ist.

Android OS wurde entwickelt, um Prozesse basierend auf einer Vielzahl von Faktoren auszutauschen. Dies bedeutet, dass Ihr Prozess von Android jederzeit beendet werden kann und ein Framework bereitgestellt wird, das Ihnen als Entwickler hilft, sicherzustellen, dass Ihre App diesen Zustand speichern und wiederherstellen kann.

A WakeLock verhindert einfach das Einschlafen der CPU, wodurch die Batterie gespart wird, wenn das Telefon nicht benutzt wird.

Nun, eine Kombination aus beidem würde Ihnen helfen, das zu erreichen, was Sie wollen, aber zu hohen Benutzerkosten. Ich möchte nicht, dass eine App in meinem Telefon die CPU ständig laufen lässt oder dass ein Benachrichtigungssymbol ständig in der Benachrichtigungsleiste angezeigt wird (das macht ein Vordergrunddienst).

Beachten Sie, dass das Starten eines Dienstes im Vordergrundmodus nicht garantiert, dass Ihre App nicht getötet wird. Es kann immer noch passieren, wenn auch selten.

Was wollen Sie hier erreichen? Warum überwachen Sie den Beschleunigungsmesser der Geräte weiter? Vielleicht solltest du es nur dann überwachen, wenn sich stattdessen ein Activity deiner App im Vordergrund befindet.

    
dnkoutso 13.08.2012 05:48
quelle
1

Ich hatte genau das gleiche Bedürfnis und Problem. Ich glaube, die Lösung besteht darin, sowohl eine partielle Wecksperre als auch einen Vordergrunddienst zu verwenden. Android versucht, einen Hintergrunddienst nicht zu beenden, der eine Wake-Sperre enthält, aber es ist frei, sie zu beenden, wenn sie die Ressourcen benötigt und möglicherweise später neu startet. Das ist für viele Zwecke gut, aber zumindest in meinem Fall ist das nicht gut genug. Wenn Sie einen Dienst in den Vordergrundzustand versetzen, können Sie Android sagen, dass das Töten inakzeptabel ist. Ja, es könnte immer noch in extremen Situationen passieren, aber das wäre jetzt eine Verletzung des API-Vertrags, während Android mit einem Hintergrund-Service frei ist, es zu töten. Sie sollten daher wahrscheinlich so programmieren, als ob das nie passieren wird, aber nur wissen, dass dies ein möglicher, aber wahrscheinlich seltener Fehler ist.

    
Melinda Green 06.03.2013 21:04
quelle