Soll in Android ein Kontaktsynchronisierungsadapter in einem separaten Prozess ausgeführt werden?

9

In meiner App verwende ich einen Kontaktsynchronisierungsadapter, der jedoch viele Informationen mit der Hauptanwendung teilt. Es gibt Einstellungen, die der Adapter benötigt, um zu arbeiten (wie Login-Informationen und wenn der Benutzer irgendwelche Synchronisierungseinstellungen ändert), so dass ich ihn zur Zeit im selben Prozess laufen lasse, und er kommuniziert mit dem Haupt-AP mit getApplicationContext() und dann ich Haben Sie einige freigegebene Variablen in Application , die der Sync-Adapter während des Synchronisierungsprozesses verwendet.

Aber im Schulungsdokument und ein paar Tutorials online Der Beispieladapter ist so eingerichtet, dass er in einem eigenen Prozess ausgeführt wird. Er verwendet android:process=":sync" im Manifest. Ist das notwendig? Und wenn es in einem separaten Prozess läuft, wie kann ich zurück zur Haupt-App kommunizieren?

    
user496854 18.12.2013, 17:05
quelle

4 Antworten

2

In unserem Kontext verwenden wir aufgrund der schnellen Suchanforderungen Remote-Service, um eine riesige Datenbank im Speicher zu halten.

Der Grund für die Verwendung von Remote-Service anstelle von lokalem Service besteht darin, dass wir die Ausführung des Service in einem separaten Prozess erschweren werden, um den maximalen Speicher pro Prozesslimit zu erreichen. Die Beschränkung hängt von verschiedenen Geräten und der Betriebssystemversion ab ).

In unserem ursprünglichen Design verwenden wir AIDL . Später wechseln wir zu Messenger . Ich kann mich nicht an den Grund erinnern. Ich werde unser Quellcode-Verlaufsprotokoll überprüfen, um herauszufinden, warum. Aber ich denke, es ist meistens, Messenger ist weniger kompliziert als AIDL , und wir brauchen nicht die Multithread-Funktion, die von AIDL bereitgestellt wird.

    
Cheok Yan Cheng 27.12.2013, 01:59
quelle
1

Das Ausführen von Service in einem eigenen Prozess kann hilfreich sein

1) Wenn Ihr Service der Prozesszerstörung Ihrer Hauptanwendung standhalten soll (aber START_STICKY ist mehr als genug für diesen Fall),

2) Wenn Sie diesen Prozess für alle "Synchronisierungs" -Tasks Ihrer Anwendung festlegen möchten (wie in Lernprogramm ),

3) , wenn Sie möchten, dass andere Apps Ihren Dienst nutzen.

Um mit dem Service in einem separaten Prozess zu kommunizieren, verwenden Sie Gebundene Dienste .

Wenn Sie den Dienst jedoch in einem separaten Prozess ausführen, erhöht sich die Komplexität der Kommunikation mit ihm. Überlegen Sie also, ob sich einer der oben genannten Fälle auf Ihre App-Zwecke bezieht.

    
a.ch. 23.12.2013 14:17
quelle
0

Ich denke, es sollte getrennt werden, aber es ist nicht erforderlich.

Im Allgemeinen lohnt es sich, einen Prozess Service zu trennen, wenn er unabhängig von Systemkomponenten oder anderen Anwendungen verwendet werden kann. In dieser Perspektive sollte der Lebenszyklus des Prozesses unabhängig von anderen Komponenten wie Activity in der gleichen App verwaltet werden, damit Android markieren kann, welcher Prozess gerade verwendet wird, um einfach und präzise entscheiden zu können, welcher Prozess im Falle eines Speichers beendet werden soll Mangel. Außerdem kann der Dienst auch dann ausgeführt werden, wenn die Frontaktivität unerwartet abstürzte.

Es ist schwierig, die gemeinsame Nutzung von Daten zwischen einzelnen Prozessen zu gewährleisten. Für Login-Daten und Einstellungen denke ich, dass Sie eine Kombination aus SharedPreferences und OnSharedPreferenceChangeListener .

    
tnj 27.12.2013 04:54
quelle
0

Wenn die Anwendung gestartet wird, können verschiedene Dinge zwischengespeichert werden, insbesondere für die Benutzeroberfläche. Indem Sie die Synchronisierungslogik in einem anderen Prozess aufteilen, ermöglichen Sie, dass der UI-Prozess beendet wird, wenn das Gerät nicht mehr genügend Arbeitsspeicher zur Verfügung hat. Dadurch werden diese UI-Caches freigegeben.

Daher ist diese Technik in erster Linie für Apps interessant, die Dienste für eine lange Zeit ausführen. Typische Beispiele:

  • Der Dienst, der Musik in einer Musik-App spielt
  • Der Dienst, der das Video in Youtube hochlädt

Allerdings:

  • Dies erhöht die Komplexität der App
  • Wenn dies nicht korrekt durchgeführt wird, kann der Gesamtspeicherbedarf der App tatsächlich erhöht werden
rds 11.04.2016 10:19
quelle