Ich versuche, die AsyncTask
-Klasse zu verwenden, um den Inhalt einer Website zu erhalten. Das Logcat teilt mir W/art: Suspending all threads took: 15(or any other number)ms
wiederholt mit. Meine Anwendung wird eingefroren, bis die Protokollmeldungen gedruckt werden. Die Benutzeroberfläche wird angezeigt, nachdem das Protokoll erstellt wurde. Ich folgte einem Tutorial und habe überprüft, dass mein Code dem Tutorial entsprechen sollte. Nach einer Weile protokolliert es ein paar Zeilen Code von der Website, aber nichts mehr. Ich habe es auch mit verschiedenen Websites versucht. Hier ist meine AsyncTask:
Die folgende Zeile ist ein Problem:
result = task.execute("http://www.vg.no/").get();
Der .get()
-Teil dieser Anweisung bedeutet "Warte, bis die Aufgabe abgeschlossen ist". Dadurch wird der UI-Thread effektiv blockiert, während die Task ausgeführt wird.
Lassen Sie einfach die Hintergrundaufgabe ihre Aufgaben erledigen und erhalten Sie die Ergebnisse über onPostExecute()
zurück. Überprüfen Sie die folgende AsyncTask:
Zuerst denke ich, dass Sie AsyncTask missbraucht haben. AsyncTask sollte asynchron nicht synchron mit get () verwendet werden.
Sie sollten onPostExecute innerhalb Ihrer AsyncTask hinzufügen und das Ergebnis dort erhalten.
%Vor%Sie könnten hier besseres Tutorial lesen - & gt; Ссылка
Ich versuche, die AsyncTask-Klasse zu verwenden, um den Inhalt einer Website zu erhalten. Das Logcat sagt mir, dass w / art: Suspending alle Threads dauerte: 15 (oder eine andere Zahl) ms wiederholt.
Sie haben eine bessere Alternative zu AsyncTask .
Aus dem Threading-Leistung -Artikel von developer.android.com :
Bei der Verwendung von AsyncTask müssen einige wichtige Leistungsaspekte berücksichtigt werden. Zunächst schiebt eine App standardmäßig alle erstellten AsyncTask-Objekte in einen einzelnen Thread. Daher werden sie seriell ausgeführt, und - wie beim Hauptthread - kann ein besonders langes Arbeitspaket die Warteschlange blockieren. Aus diesem Grund empfehlen wir, dass Sie nur AsyncTask verwenden, um Arbeitselemente mit einer Dauer von weniger als 5 ms zu verarbeiten.
Sie können HandlerThread als Alternative verwenden. Wenn Sie viele URLs abgerufen haben, gehen Sie zu ThreadPoolExecutor
Sehen Sie sich verwandte Beiträge an:
Ich habe das gleiche Problem auf diese Weise. "while" ist der Grund für Ihr Problem, Sie müssen es loswerden.
Tags und Links java android multithreading