1. Inhaltsanbieter sind nicht threadsicher
Standardmäßig sind Inhaltsanbieter nicht threadsicher. Wenn Sie mehrere Threads verwenden, die einen Inhaltsanbieter verwenden, werden möglicherweise viele verschiedene Ausnahmen und andere Dateninkonsistenzen ausgelöst. Der einfachste Weg, dies zu beheben, besteht darin, das synchronisierte Schlüsselwort für jede der vom Inhaltsanbieter bereitgestellten öffentlichen Methoden zu verwenden.
Auf diese Weise kann jeweils nur ein Thread auf diese Methoden zugreifen.
2. Spielen Sie gut, wenn Sie viele Schreibvorgänge ausführen
In der neuen Serval Maps-Anwendung müssen Daten aus Binärdateien in die von der Anwendung intern verwendete Datenbank importiert werden. Um dies zu tun und mit dem Rest der Anwendung gut zu spielen, ist es am besten:
Erstellen Sie einen neuen Thread, um den Import durchzuführen, damit andere Threads nicht beeinträchtigt werden, insbesondere der Thread, der für die Aktualisierung der Benutzeroberfläche zuständig ist. und Pause am Ende jedes Imports, um anderen Threads, die die synchronisierten Methoden verwenden müssen, eine größere Chance zu geben.
3. Inhaltsanbieter zwingen Sie manchmal dazu, seitlich zu denken
Die Art und Weise, wie Inhaltsanbieter in Android arbeiten, besteht darin, eine Abstraktionsebene zwischen dem Rest Ihres Codes und der zugrunde liegenden Datenbank bereitzustellen. Dies liegt hauptsächlich daran, dass Inhaltsanbieter, soweit ich das beurteilen kann, von anderen Orten als von Datenbanken aus auf Daten zugreifen können.
Dies bedeutet, dass Sie keine SQL-Rohabfragen in der zugrunde liegenden Datenbank ausführen können und die verschiedenen Komponenten einer SQL-Abfrage mithilfe von Variablen angeben müssen, die an die verschiedenen Methoden übergeben werden, z. B. die Abfragemethode. Wenn Sie eine Aufgabe haben, die nicht in die Art und Weise passt, wie SQL von einem Inhaltsanbieter behandelt wird, haben Sie zwei Möglichkeiten:
Denken Sie seitlich über die Abfrage nach. Vielleicht können Sie die Daten, die Sie benötigen, durch alternative Abfragen und den Zugriff auf die Ergebnisse über den Cursor erhalten. und Verwenden Sie einen URI für den normalen Zugriff auf die Daten und einen speziellen URI, der einer bestimmten Abfrage für Aufgaben zugeordnet ist, für die es keine Alternativen gibt.