Ziel: Habe einen ProgressDialog, der "Loading ..." anzeigt, bis die nächste Aktivität vollständig geladen und auf dem Bildschirm angezeigt wird.
Versucht mit ProgressDialog-Kontext und -Aktivität, die auf die ursprüngliche Aktivität festgelegt wurden. Auch versucht mit getApplicationContext () und getParentContext (). Ausnahmen zu den letzten beiden Ansätzen. Dies muss als Ziel ausgeführt werden. Aktivität wird aufgrund einer nicht einfachen Layout-Datei langsam wiedergegeben. (Das kann momentan aufgrund organisatorischer Probleme nicht behoben werden.) Stellt sich heraus, dass die Zielaktivität 1-2 Sekunden dauert, bis OnCreate angezeigt wird, und der Bildschirm dann für bis zu 5+ Sekunden schwarz wird und dann malt. Das Rendering ist nur langsam. Hat mit Hierarchie-Viewer gelesen und viele rote Kugeln gesehen, kann aber jetzt nicht reparieren.
Lesen Sie etwas Ähnliches, aber haben Sie keine Lösung gefunden. Z.B. Was ist der Unterschied zwischen den verschiedenen Methoden? einen Kontext bekommen?
z. beide stürzen ab. Die Verwendung des "Dies" der Quellenaktivität funktioniert auch nicht.
%Vor%Seltsamerweise passiert auch nichts, wenn ich das tue: theProgressDialog.show (); ActivityHelper.changeActivity (dies, v, InsMyHoldingsActivity.class, extraMap, -1, -1); Der Benutzer klickt auf die Schaltfläche, um die nächste Aktivität anzuzeigen, aber der ProgressDialog steht in Konflikt mit dem Start der Aktivität und es passiert nichts, außer dass die Schaltfläche gelb wird. Button unten funktioniert. Entfernen ProgressDialog Erstellung und es funktioniert. Keine Konsolennachrichten protokolliert. Ein bißchen abspenstig für den Entwickler.
Sie können einen Fortschrittsdialog wie folgt anzeigen -
Definieren Sie dies
%Vor%in Ihrer Aktivitätsklasse
Setzen Sie dies in Ihre onCreate (Dont setContentView direkt hier)
%Vor%// Hintergrund schweres Heben
%Vor%Gehen Sie auch folgendermaßen vor: http://developer.android.com/training/improving-layouts/index.html, um die Layout-Leistung zu optimieren. Verwenden Sie auch TraceView, um nach Engpässen zu suchen
Es gibt zwei Möglichkeiten zu
Erster Ansatz So verwenden Sie die Async-Aufgabe
Wenn Sie schwere Aufgaben ausführen, zB Daten vom Server laden oder XML analysieren, verwenden Sie AsynTask & lt; & gt; Wenn Sie ActivityB von ActivityA aufrufen möchten,
* step-1 * Erstellen Sie eine AsyncTask-Klasse. schreibe alle Hintergrundaufgaben in die doBackground () -Methode und nach dem Abschluss der Aufgabe, die eine Aktivität aufgerufen werden soll, schreibe in onPostExecute () post execute method
%Vor%step-2 In der Aktivität, wo Sie zu einer neuen Aktivität springen möchten (zB in ActivityA), rufen Sie execute () von AsynTask
auf %Vor%Zweiter Ansatz
Zuerst den Fortschrittsdialog anzeigen. Erstellen Sie einen Thread für alle Hintergrundaufgaben. Wenn der Thread die Aufgabe abgeschlossen hat, brechen Sie den Fortschrittsdialog ab und rufen Sie die nächste Aktivität auf
oder
Wenn der Thread die Aufgabe abgeschlossen hat, rufen Sie die nächste Aktivität auf und übergeben Sie dieses Objekt (Fortschrittsdialog) und innerhalb dieser neuen Aktivität wird dieser Dialog geschlossen.
Hier ist mein Code, der helfen kann.
Ich poste hier nur die erste Methode von AsyncTask
, d.h onPreExecute
.
User_AsyncTask erweitert AsyncTask:
%Vor%Tags und Links android progressdialog