Fall: Damit die Benutzer meiner App die App auch verwenden können, wenn sie keinen Zugang zum Internet haben, speichere ich die Daten in einer SQLite-Datenbank. Damit verschiedene Teile der App auf aktuelle Benutzerdaten zugreifen können, verwende ich einen Singleton. Geht so;Android-Aktivität & Async SQLite-Kommunikation Optimierung
Daten abrufen und vor der Verwendung speichern: Anfrage an Server => Paket mit Daten => Singleton => SQLite DB.
zeigen Daten für Benutzer: SQLite DB => Java-Klassen => Singleton => Aktivität
Rufen Sie die Daten an die SQLite DB zu speichern:
DatabaseConductor dbc = new DatabaseConductor(getApplicationContext());
dbc.setReturnCue(MyActivity.this);
dbc.execute(DataBaseActions.STUFF_SQL_IN);
die DatabaseConductor ist einfach tut dies:
public class DataBaseConductor extends AsyncTask<String, String, String> {
private Context context;
private DataBaseConductorCueing returnCue = null;
for (String message : params) {
Log.d("Doing in BG", message);
switch (message) {
case THING_TO_DO:
methodToActiallyDoStuff();
break;
}
Und ja, sowohl der DatabaseConductor als auch die aufrufende Aktivität verwenden ein Interfac e für die Kommunikation, dass Zeug gemacht wird. Wie so:
public interface DataBaseConductorCueing {
void processFinish(String output);
}
Vorerst verwende ich public static final Strings zu überprüfen, was getan werden muss, und um ehrlich zu sein, würde ENUM wahrscheinlich besser sein. Ich hoffe, dass dieser Code klar zeigt, wie es funktioniert. Gibt es andere Dinge, die getan werden könnten, um dies zu optimieren?
bearbeiten 1: Ganzzahlen sind besser als Enums.
bearbeiten 2: Das Entwurfsmuster für die Schnittstelle ist eine Callback-Schnittstelle, auf diese Weise müssen Sie keine Handler registrieren.
Danke für den Link! und das Abmelden. Und wahr, in den Code-Schnipsel sind keine Beispiele für den Singleton. – Flummox