2016-04-17 9 views
1

Android App, an der ich arbeite, liest aus der Nähe von Beacons (Geräte) mit Bluetooth. Es funktioniert gut, wenn die App im Vordergrund ist (getestet für 20 Minuten). Einige Minuten nachdem die App in den Hintergrund wechselt, hört sie auf zu lesen.android: Wie man sicherstellt, dass meine App nicht pausiert, wenn sie im Hintergrund läuft

Ich merke, wenn App in den Hintergrund geht, onpause() -Methode ausgeführt wird; Noch liest meine App für ein paar Minuten und hört dann einfach auf, etwas zu lesen (wenn ich die App manuell in den Vordergrund bringe, wird die Methode oncreate ausgeführt und die App wird normal fortgesetzt).

Warum hört meine App auf, einige Minuten zu lesen, nachdem es in den Hintergrund ging. Meine App ist eine Aktivität und kein Service.

  1. sollte die Aktivität umwandeln zu warten oder
  2. sollte ich schaffen intentservice oder
  3. sollte ich schaffen foregroundserive

I donot den Unterschied zwischen über 3 Arten von Dienstleistungen verstehen und wenn einer von ihnen würde mir helfen.

Obwohl etwas ältere Themen, wiederholte ich Prevent that the app get stopped or paused by the OS und How can we prevent a Service from being killed by OS? und my app killed by android system when it running in background

Aber ich bin verloren. Jede Diskussion geschätzt

EDIT

Wie ich aus @davidgyoung Antwort verstehen, ich habe einen Dienst zu schreiben. Ich nehme an, GUI-Teil meiner App geht in Mainactivity; dann, wie ich meine mainactivity sicherstellen kann/GUI ist noch aktiv im Speicher und wurde nicht von Android durch die Zeit-Dienst versucht, getötet zu übertragen/notify GUI

/EDIT

Antwort

2

Eine Aktivität nicht ausgeführt werden soll für längere Zeit im Hintergrund. Das Android-Betriebssystem wird Aktivitäten löschen, die nicht sichtbar sind, da für andere Funktionen Speicher benötigt wird. Während ein Service ist die richtige Alternative, sogar ein Service wird unter dem Speicherdruck durch das Betriebssystem zerstört werden, so Sie müssen noch den Dienst neu starten, wenn es von der OS getötet wird und Sie weiterhin Beacon Scanning tun wollen. gehen

Alle diese Fragen kam, als wir die Android Beacon Library gebaut, und wir auf diese Lösungen abgerechnet Scannen zu halten:

  • einen Dienst verwenden für Baken im Hintergrund zu scannen. Es muss kein IntentService sein, aber das ist eine vernünftige Option.

  • Verwenden Sie eine AlarmManager, um den Scan-Dienst 5 Minuten in der Zukunft neu zu starten, falls es getötet wird. (Diese Verzögerung ermöglicht es dem Betriebssystem, sich von einem vorübergehenden Bedarf an zusätzlichem Speicher zu erholen.) Wenn der Scan-Dienst noch läuft, planen Sie den Alarm einfach neu.

  • Registrieren Sie sich für Ereignisse auf Betriebssystemebene (Boot, Strom verbinden/trennen), um den Scan-Dienst zu einem späteren Zeitpunkt neu zu starten, wenn der Benutzer die App mit dem Task-Switcher beendet.

All dies für Sie gebaut, wenn Sie die Android Beacon-Bibliothek verwenden möchten (und wir Beiträge willkommen, auch!) Wenn Sie Ihre eigene Rolle möchten, Sie look at the source code möchten, wie diese Dinge zu sehen wurden gebaut. Fühlen Sie sich frei, auch zu kopieren und zu ändern. Das ist die Schönheit von Open Source!

Volle Offenlegung: Ich bin der Hauptentwickler auf der Open Source-Projekt Android Beacon Library.

+0

Wie würde ich wissen, wenn mein Beacon mit ABL kompatibel ist. Das folgende Tool erkennt meine Beacons nicht https://play.google.com/store/apps/details?id=com.radiusnetworks.locate – mobileDev

+0

Die Android Beacon Library kann jedes Beacon mit einem veröffentlichten Format erkennen. Wenn Sie Ihren Beacon-Typ beschreiben können, kann ich Ihnen vielleicht Tipps geben. – davidgyoung

+0

Ja. Ich habe es mit ABL arbeiten lassen. Danke David – mobileDev