519 Stimmen

Die Anwendung könnte zu viel Arbeit auf ihrem Hauptthread verrichten

Ich bin neu in der Android SDK/API-Umgebung. Es ist das erste Mal, dass ich versuche, ein Diagramm / eine Tabelle zu zeichnen. Ich habe versucht, verschiedene Arten von Beispielscodes auf dem Emulator mit 3 verschiedenen kostenlosen Bibliotheken auszuführen, aber nichts wird auf dem Layout-Bildschirm angezeigt. Im Logcat wird die folgende Meldung wiederholt:

 W/Trace(1378): Unerwarteter Wert von nativeGetEnabledTags: 0
 I/Choreographer(1378): 55 Frames übersprungen! Die Anwendung könnte zu viel Arbeit auf ihrem Hauptthread erledigen.

Das Problem trat nicht auf, und das Diagramm funktionierte, als ich einen Beispielscode für eine Testversion einer lizenzierten Bibliothek ausführte.

18voto

MigDus Punkte 737

Versuchen Sie, die folgenden Strategien zu verwenden, um die Leistung Ihrer App zu verbessern:

  • Verwenden Sie bei Möglichkeit die Mehrfadenprogrammierung. Die Leistungsvorteile sind enorm, auch wenn Ihr Smartphone nur einen Kern hat (Threads können auf verschiedenen Kernen ausgeführt werden, wenn der Prozessor zwei oder mehr hat). Es ist nützlich, Ihre App-Logik vom UI zu trennen. Verwenden Sie Java-Threads, AsyncTask oder IntentService. Hierüber informieren.
  • Lesen Sie und befolgen Sie die allgemeinen Leistungstipps der Android-Entwicklungswebsite. Hier nachsehen.

9voto

HarshitG Punkte 2559

Optimieren Sie Ihre Bilder ... Verwenden Sie keine Bilder größer als 100 KB ... Das Laden von Bildern beansprucht zu viel CPU und lässt Ihre App abstürzen.

8voto

Radoslav Punkte 1436

Ich hatte das gleiche Problem. In meinem Fall hatte ich 2 verschachtelte Relative Layouts. RelativeLayout muss immer zwei Messdurchläufe machen. Wenn Sie RelativeLayouts verschachteln, erhalten Sie einen exponentiellen Messalgorithmus.

8voto

Hossein Karami Punkte 696

Dies geschieht normalerweise, wenn Sie große Prozesse im Hauptthread ausführen. Es ist in Ordnung, Frames unter 200 zu überspringen. Aber wenn Sie mehr als 200 übersprungene Frames haben, kann dies den Anwendungs-UI-Thread verlangsamen. Was Sie tun können, ist, diese Prozesse in einem neuen Thread namens Worker-Thread auszuführen und danach, wenn Sie auf den UI-Thread zugreifen und etwas damit machen möchten (z. B. etwas mit Ansichten tun, findView usw.), können Sie Handler oder runOnUiThread verwenden (das gefällt mir mehr), um die Verarbeitungsergebnisse anzuzeigen. Dies löst das Problem absolut. Die Verwendung von Worker-Threads ist sehr nützlich oder sogar ein Muss, wenn es um solche Fälle geht.

https://stacklearn.ir

8voto

saba Punkte 83

Ich bin kein Experte, aber ich habe diese Debug-Meldung bekommen, als ich Daten von meiner Android-Anwendung an einen Webserver senden wollte. Obwohl ich die AsyncTask-Klasse benutzt habe und den Datentransfer im Hintergrund durchgeführt habe, habe ich zur Rückgabe der Ergebnisdaten vom Server die get() Methode der AsyncTask-Klasse benutzt, die die UI synchron macht, was bedeutet, dass deine UI zu lange warten wird. Mein Rat ist also, dass du deine App jede netzwerkorientierte Aufgabe in einem separaten Thread erledigen lässt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X