Ich habe einen Intentservice, der von Alarmmanager etwa jede Stunde ausgelöst wird, wenn er Daten von einem Server herunterlädt und Einfügungen in eine meiner SQLite-Datenbanktabellen vornimmt.Verwendung von SQLiteOpenHelper aus separaten Prozessen
Ich habe einen anderen lang laufenden Hintergrund-Service, der SCREEN_ON-Aktionen abfängt und auch Einfügungen und Lesungen für dieselbe Datenbanktabelle durchführt. Der Hintergrunddienst wird in einem eigenen Prozess ausgeführt. Dies ist, wie ich es in dem Manifest erklären:
<service
android:name=".MyBackgroundService"
android:enabled="true"
android:exported="false"
android:process=":background"/>
Meine Frage ist, was passiert, wenn durch Zufall zwei Dienste exakt gleiche Zeit tun Datenbank Einfügungen/Messwerte auf, wird es keine Probleme verursachen, wie meine Anwendung abstürzt? Wenn ja. Wie kann ich das beheben?
Wird diese Garantie meine SQLite-Transaktionen in die Warteschlange gestellt und beendet, wenn Kollisionen auftreten? – hal0360
Ja, Sie hätten nur einen 'SQLiteOpenHelper', mit dem alles über Ihre gesamte App läuft. – ianhanniballake
„mit mehreren Prozessen schreiben auf die gleiche Datenbank zur gleichen Zeit wird Probleme verursachen, die in Ihrer Anwendung abstürzt wahrscheinlich dazu führen wird“ - SQLite Griffe diese auf anderen Plattformen. Ich stimme zu, dass ein "ContentProvider" hier die richtige Antwort ist, aber ich bin neugierig, wenn Sie etwas über SQLite auf Android wissen, das den Zugriff auf mehrere Prozesse verbietet. – CommonsWare