Ich baue eine App, die den Batteriezustand, die WLAN-Verbindung und die Standortdaten in regelmäßigen Abständen überwacht und die Ergebnisse in eine Datei schreibt (und sie später an einen Server sendet). Bei der Installation der App sollte die Überwachung deaktiviert werden - aber der Benutzer, der sie aktiviert, sollte einen Neustart überleben. Nach viel Lesen habe ich festgestellt, dass ich im Grunde 2 Optionen habe:Android-Design: Hintergrund lang laufenden Dienst oder AlarmManager?
Service
und feuern Sie es von meiner Tätigkeit ab. Stellen Sie es auf den Vordergrund, STICKY und was nicht und hoffe, dass es nicht von Android getötet wird - und passen Sie auf, wenn android es neu erstellt (tatsächlich sollte es 3 Dienste geben, also könnte die Synchronisierung zwischen ihnen chaotisch sein). Starten Sie einen Thread im Dienst (keine Notwendigkeit für Executors ich denke) und haben Sie Thread.sleep(REGULAR_INTERVAL)
. Wach auf, sammle die Daten schreibe sie in eine Datei. Senden Sie die gesammelten Informationen und zeigen Sie sie auf meiner Aktivität an, wenn sie gerade ausgeführt wird (wodurch ein Broadcast-Empfänger registriert wurde). Spülen und wiederholen while(true)
. Haben Sie eine Möglichkeit, dies zu unterbrechenIch denke, ich muss einen Boot-Empfänger in beiden Fällen registrieren, um die Shared Preferences zu überprüfen (habe dies bereits getan) und im Fall 1 starten die Dienste, während 2 einen Empfänger für das Alarmereignis registrieren und setze den Alarm-Manager auf - das ist der Teil, den ich brauche ein Skelett-Code.
Also - bevor ich anfange das zu bauen - was wäre der bevorzugte Ansatz?
Im Rückblick - die App sollte einige Telefoneigenschaften überwachen und in eine Datei schreiben, bis der Benutzer sich entscheidet, sie auszuschalten.
Ihre Benutzer werden Sie wahrscheinlich töten, wenn Sie eine 'Service' am Leben zu halten ständig ihre Handy-Akku zu belasten nur Kuppel Daten in bestimmten Zeitintervallen zu sammeln. Verwenden Sie den zweiten Ansatz mit einem 'IntentService' mit zusätzlichen WakeLocks, falls nötig (schauen Sie sich den 'WakefullIntentService' von CommonsWare an). – Luksprog
@Luksprog: danke - würde ich Schlösser brauchen? in dem Rundfunkempfänger, der den Alarm empfangen würde (immer noch im Hinblick darauf, wie genau dies implementiert werden sollte)? –
Warum die negative Stimme? –