2 Stimmen

Langsame SeekBar-Leistung auf Android

Ich versuche, einen einfachen Audio-Player einzurichten. Die Audio-Seite ist erledigt, aber ich verwende einen SeekBar als Track-Scrubber und habe Probleme mit der Leistung.

Der SeekBar stammt aus einem XML-Layout, und ich verwende ziemlich grundlegenden Code, um ihn zu aktualisieren:

updateTask = new Runnable() {

    public void run() {

        int vergangen = 0;
        if (player != null) {
            vergangen = player.getElapsedTime(); // Sekunden
        }
        trackSeekbar.setProgress(vergangen);
        updateHandler.postDelayed(this, 1000);
    }

};

updateHandler.postDelayed(updateTask, 1000);

Dieser Code verwendet zwischen 20% und 50% CPU auf einem Nexus 10! Dadurch werden andere Teile meiner App sehr unruhig, daher muss es schneller gehen.

Ich habe bereits einige Dinge im Layout entfernt, um Layout-Neuauftritte zu reduzieren (ich habe die vergangene Zeit in einem Textfeld angezeigt, aber aufgegeben, weil es einfach zu langsam war), aber ich benötige einen einfachen Scrubber. Wenn ich den Aufruf von setProgress() entferne, sinkt die CPU-Auslastung auf 1%. Gibt es einen besseren Weg, dies zu tun?

0voto

Dan Halliday Punkte 715

Die Ursache für die schlechte Leistung war eine hochauflösende transparente PNG im Hintergrund. Als ich es entfernte, verschwanden alle verschiedenen Leistungsprobleme.

Auf dem Nexus 10 hatte das Bild eine Auflösung von 2560x1440, was seine native Auflösung ist. Anscheinend ist Android nicht in der Lage, mit Hintergrundbildern in voller Auflösung umzugehen.

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