Wo sollen Android-Anwendungen SQLite getWritableDatabase aufrufen?

Die Dokumentation unter http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#getWritableDatabase%28%29 gibt an:

Datenbank-Upgrade kann eine lange Zeit dauern, sollten Sie diese Methode [getWritableDatabase] nicht aus dem Anwendungs-Haupt-Thread, einschließlich von ContentProvider.onCreate () aufrufen.

  • Warum wird mein Android-Service neu gestartet, wenn der Prozess getötet wird, obwohl ich START_NOT_STICKY verwendet habe?
  • Ok, um Fragmente zu aktualisieren, anstatt neue Instanzen zu erstellen?
  • Fehler beim Analysieren von XML: ungebundenes Präfix auf Bibliothek
  • Der Keystore konnte nicht in AndroidStudio geöffnet werden - "Redundante Länge Bytes gefunden"
  • Nicht-UI Fragment vs Singleton
  • Realm Query möglich, IN zu verwenden?
  • Das ist die Frage: Für die beste Praxis, wo sollte man ausschreibbareDatabase abrufen?

    Mein Gefühl ist, dass, vielleicht, sollte es einmal bei der Anwendung starten mit einem Rückruf, um die Datenbank als bereit zu markieren. Ist das richtig?

  • So verwenden Sie vorkompilierte Header-Dateien in Android NDK
  • Erkennung von Alarmen für Alarme für Alarme
  • Hören Sie tippen und ziehen Sie den Wert und funktionieren entsprechend
  • Erweiterte RecyclerBibliothek - Codebeispiele
  • ImageLoader vs Android Universal Image Loader
  • Java.lang.NoClassDefFoundError in Android Studio retrofit2.Utils
  • 3 Solutions collect form web for “Wo sollen Android-Anwendungen SQLite getWritableDatabase aufrufen?”

    Für kleine und agile Datenbanken stelle ich mir vor, das ist nicht viel los.

    Ansonsten würde ich eine immer wunderbare AsyncTask , die von onCreate .

    Es kann von überall aufgerufen werden, aber es sollte nicht aus dem UI-Thread aufgerufen werden, weil man nicht weiß, wie lange der Prozess dauert (vor allem bei den verschiedenen verwendeten Dateisystemen). Auch wenn Sie wissen, dass die Datenbank klein sein sollte, wissen Sie nicht über das Dateisystem (kann es mehr als einen Job zu einem Zeitpunkt ausführen? Gibt es tausend andere Jobs, die schon in der Warteschlange warten?). Sie können eine AsyncTask oder ein Thread , um getWriteableDatabase aufzurufen.

    Es scheint, dass die beabsichtigte Verwendung der offenen Helfer Rahmen, ist es, die db auf Aktivität zu öffnen, und schließen Sie es, wenn die Aktivität zerstört wird.

    In einer AsyncTask von insideCreate () …

     new StartupTask().execute(); 

    Die AsyncTask Thread.sleep () unten ist nur um genügend Zeit zu geben, um den Dialog zu zeigen, damit du es sehen kannst. Offensichtlich nehmen Sie das heraus, wenn Sie fertig sind, zu spielen. 😉

     private class StartupTask extends AsyncTask { private ProgressDialog progressDialog; @Override protected Object doInBackground(final Object... objects) { openHelperRef.getWritableDatabase(); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } @Override protected void onPreExecute() { super.onPreExecute(); runOnUiThread(new Runnable() { public void run() { progressDialog = ProgressDialog.show( MyActivity.this, "Title", "Opening/Upgrading the database, please wait", true); } }); } @Override protected void onPostExecute(Object object) { super.onPostExecute(object); progressDialog.dismiss(); } } 

    In onDestroy () … openHelper.close ();

    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.