Wie kann man eine TCP-Verbindung auf unbestimmte Zeit aufbauen?

Ich muss eine TCP-Verbindung auf unbestimmte Zeit aufbauen (so weit wie möglich). Ist kein eigener Server, so können wir nicht ändern, wie es funktioniert. Dieser Server braucht irgendeine Art auf Ping jede Minute zu wissen, dass die Verbindung am Leben ist. Wenn der Server nach einigen Minuten (weniger als fünf) das Ping nicht empfängt, wird die Verbindung und die Sitzung geschlossen. Auf diese Weise muss ich eine TCP-Verbindung mit dem Server pflegen und in der Lage sein, Pings zu den angegebenen Zeitpunkten zu senden.

Im Moment habe ich einen Android-Service mit der Fahne "ongoing" so Android sollte es nicht töten (zumindest bei normalen Prozeduren). Der Android-Service scheint gut zu laufen und die Pings werden regelmäßig geschickt. Allerdings, wenn der Service auf einem Mobiltelefon läuft (nicht Emulator) und es wird im Leerlauf, Android scheint den Service zu frieren, während die CPU schläft, so dass die TimerTask Senden Pings aufhören zu arbeiten und die Verbindung geht nach unten.

  • Gibt es eine Möglichkeit zu überprüfen, ob ein Alarm bereits eingestellt ist?
  • Android-Alarm funktioniert nicht
  • Vorübergehende Absicht extra zum androiden Rundfunkempfänger
  • Wie man den Alarm zurücksetzt, wenn die App in Androide geschlossen ist
  • AlarmManager Wiederholen Alarm fehlt zufällig, wenn das Telefon nicht in Gebrauch ist
  • Was passiert, wenn ich zweimal einen Alarm öffne?
  • Ich habe versucht, das Telefon zu verriegeln, um mit einem teilweisen Wake Lock zu schlafen und es löst das Problem, aber das Telefon verbraucht zu Batterie, was unmöglich ist.

    Ich bemerkte, dass der AlarmManager bei dieser Aufgabe helfen kann, also möchte ich einen Alarm planen, um den laufenden Service zu aktualisieren und dann den Ping zu senden. Dies lässt die CPU schlafen und auch das Ping wird gesendet. Aber planen Sie einen Alarm jede Minute kann auch so Batterie verbrauchen oder nicht?

    Ich habe diesen Ansatz noch nicht getestet, ist aber machbar? Gibt es einen besseren Weg, um diese Art von TCP-Verbindung zu behalten ?. Wie Android-Dienste wie Gmail löst diese Art von Problemen?

  • Wie bekommst du einen Android-Kontext für einen Junit-Test aus einem Java-Projekt?
  • Google Maps in Android: Fehler beim Finden des Stils 'mapViewStyle' im aktuellen Thema
  • Wie man einen YouTube-Clip in einem WebView auf Android einbindet
  • Deaktivieren Sie Vibrationen für eine Benachrichtigung
  • Android Emulator stürzt auf Ubuntu 11.10 ab
  • Verzögerung bei der Verwendung von android.speech.SpeechRecognizer in DICTATION_MODE
  • 3 Solutions collect form web for “Wie kann man eine TCP-Verbindung auf unbestimmte Zeit aufbauen?”

    Ich muss eine TCP-Verbindung auf unbestimmte Zeit mit einem Server aufbauen.

    Warum?

    Für den Anfang ist es technisch unmöglich. Benutzer wechseln zwischen den Netzwerken (z. B. auf WiFi, fehlgeschlagen auf 3G), die Nutzer verlassen Bereiche, wo sie Internet-Abdeckung haben, werden die Nutzer Flugzeug-Modus, etc. einschalten.

    Im Moment habe ich einen Android-Service mit der Fahne "on_course" so Android sollte es nicht töten.

    Es gibt kein solches Konzept wie "on_course" in Android. Android-Dienste können und werden von Nutzern getötet (Task-Killer, Power-Stop in Manage Services) oder durch das Betriebssystem. Und da dies eine ewige Dienstleistung sein wird, werden Ihre Benutzer Ihren Dienst töten, wenn sie nicht verstehen, welchen Wert sie kontinuierlich liefert.

    Ich habe versucht, das Telefon zu verriegeln, um mit einem teilweisen Wake Lock zu schlafen und es löst das Problem, aber das Telefon verbraucht zu Batterie, was unmöglich ist.

    Richtig.

    Ich bemerkte, dass der AlarmManager bei dieser Aufgabe helfen kann, also möchte ich einen Alarm planen, um den laufenden Service zu aktualisieren und dann den Ping zu senden. Dies lässt die CPU schlafen und auch das Ping wird gesendet. Ich habe diesen Ansatz noch nicht getestet, ist aber machbar?

    Sicher. Du verbrauchst immer noch zu viel Akku, IMHO. Bitte erlauben Sie Ihrem Benutzer, Ihre Wahlperiode zu kontrollieren, mit einer breiten Palette von Optionen (zB 10 Minuten, 30 Minuten, eine Stunde, nie).

    Wie Android-Dienste wie Gmail löst diese Art von Problemen?

    Sie verwenden C2DM, die Teil des Betriebssystems ist und nahm eine Menge Technik, um richtig zu bekommen. Es gab eine Präsentation auf der 2010 Google I | O Konferenz – das Video sollte auf YouTube sein. Beachten Sie, dass sie den Heartbeat Ping alle 30 Minuten IIRC, und sie optimieren für den Fall, wo das Gerät auf 3G ist (um das WiFi-Radio zu deaktivieren, nachdem Inaktivität).

    Wenn Ihr Ziel Ihrer permanenten Verbindung ist, einen Push-Style-Kommunikationskanal zu implementieren, beachten Sie bitte die Verwendung von C2DM.

    Sie können Telefon aus dem Leerlauf mit teilweisem Wecksperre wecken, bevor Sie Ping ausführen und nachdem Sie es loslassen Wakelock. Es wird wissenschaftlich reduzieren Batterieverbrauch und es wird die Arbeit zu tun. Versuchen Sie auch, die Ping-Zeit zu erhöhen, solange Sie können.

    5 Minuten ist ein bisschen kurz für die Ping-Zeit, können Sie den Server konfigurieren, um die Verbindung länger zu halten? 30 Minuten Ping oder höher wäre ideal. Hier ist ein Beispiel für eine Anwendung, die eine Hintergrund-tcp-Verbindung hält und wird das Gerät aus einem tiefen Schlaf auf eingehenden tcp-Verkehr aufwachen. https://github.com/schwiz/android-websocket-example

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.