Ich suche nach einer Möglichkeit, Benachrichtigungen für einen bestimmten ContentProvider
s Uri
auszusetzen. Der Anwendungsfall ist:
Activity
ist an ein CursorAdapter
über ein CursorLoader
gebunden. Service
kann viele Batch-Aktualisierungen für eine Zeile in einem ContentProvider
durchführen. CursorLoader
lädt seinen Inhalt bei jeder Zeilenaktualisierung neu, da der ContentProvider
Listener über ContentResolver#notifyChange
. Da ich die ContentProvider
nicht bearbeiten kann und ich keine Kontrolle über die Ausführung der Batch-Abfragen habe, gibt es eine Möglichkeit, Benachrichtigungen auf einer Uri
(in der ausführenden Service
) bis alle ContentProvider
auszusetzen -managed Abfragen wurden ausgeführt? Ich brauche das, um das Flackern zu vermeiden, das durch das ständige erneute Abfragen von CursorLoader
verursacht wird.
Sie können diesen Mechanismus in Ihrem Service nicht deaktivieren. Sie sollten jedoch versuchen, sie zu chargen, indem Sie ContentProviderOperations verwenden.
Ich habe einen einleitenden Artikel über ContentProviderOperations geschrieben und zwei weitere Beiträge zu den Methoden withYieldAllowed()
und withBackReference()
jeweils.
Besonders die letztere sollte für das interessant sein, was Sie hier beschrieben haben.
Mit ContentProviderOperations können Sie mehrere Aktualisierungen und Einfügungen im Stapel verarbeiten. Wenn Sie dann applyBatch()
auf Ihrem ContentResolver-Objekt führt der ContentProvider sie alle gleichzeitig aus.
Jetzt habe ich nie den Generator von Nicolas Klein benutzt, aber da er ein sehr, sehr fähiger Android-Entwickler ist und bei Google arbeitet, wette ich, dass der generierte Code die Transaktionen und nutzt notifyChange()
nur einmal für den kompletten Stapel am Ende.
Genau das, was Sie brauchen.
Tags und Links android android-contentprovider android-sqlite