1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. ChrisMobile, 22.09.2011 #1
    ChrisMobile

    ChrisMobile Threadstarter Android-Experte

    Hallo zusammen,

    ich hab einen standard-Block, den ich in meinen Apps nutze um etwas von einer Webseite auszulesen.
    Der Code funktioniert an sich sehr gut, nur leider läuft das Auslesen meiner Meinung nach sehr langsam.

    Ich hab nun ein bisschen rumgebastelt und nach Alternativen gesucht aber irgendwie war noch nichts dabei, was wirklich spürbar schneller geht.

    Code:
        /**
         * Liefert die angegebene Webseite als String zurück.
         *
         * @return HTML der Webseite.
         */
        private String getSourceCode() {
            URL url = null;
            try {
                url = new URL(wantedURL);
            } catch (MalformedURLException e) {
                writeErrorLogOnSD(e);
                e.printStackTrace();
            }
            URLConnection conn = null;
            try {
                conn = url.openConnection();
            } catch (IOException e) {
                writeErrorLogOnSD(e);
                e.printStackTrace();
            } catch (NullPointerException e) {
                writeErrorLogOnSD(e);
                e.printStackTrace();
            }
            // editText.getText().toString()
            BufferedReader rd = null;
            try {
                rd = new BufferedReader(
                        new InputStreamReader(conn.getInputStream()));
            } catch (IOException e) {
                writeErrorLogOnSD(e);
                e.printStackTrace();
            } catch (NullPointerException e) {
                writeErrorLogOnSD(e);
                e.printStackTrace();
            }
    
            String line = "";
            String oldLine = "";
            if (rd != null) {
                System.out.println("Got Line");
                try {
                    while ((line = rd.readLine()) != null) {
                        oldLine = oldLine + line;
                    }
                } catch (IOException e) {
                    writeErrorLogOnSD(e);
                    e.printStackTrace();
                }
                try {
                    rd.close();
                } catch (IOException e) {
                    writeErrorLogOnSD(e);
                    e.printStackTrace();
                }
            } else {
                System.out.println("No Line");
                error = true;
            }
    
            return oldLine;
        }
    
    Wäre cool, wenn ihr ein paar Geheim-Tipps in der Hinterhand habt, oder gibt es wirklich nichts, dass "deutlich" schneller ist?

    Viele Grüße
    Chris
     
  2. Fr4gg0r, 22.09.2011 #2
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    StringBuilder einsetzen (tut sonst der Compiler führ dich, aber ineffizient. Der erstellt dann nämlich im Schleifenrumpf jedes mal einen neuen).
     
  3. ChrisMobile, 23.09.2011 #3
    ChrisMobile

    ChrisMobile Threadstarter Android-Experte

    Danke für den Tipp, das Herunterladen der Daten geht nun im Schnitt 4x schneller!

    Hab die beiden Funktionen gerade direkt verglichen und auf der selben Webseite dauert es mit dem Code ohne StringBuilder ca. 4000ms (mehrfach getestet) und mit dem StringBuilder nur noch ca. 1000ms (teilweise sogar nur 800ms).

    Hier kommt nochmal der neue Code für die Nachwelt:
    Code:
                    /*
                    while ((line = rd.readLine()) != null) {
                        oldLine = oldLine + line;
                    }
                    */
                    StringBuilder sb = new StringBuilder();
                    while ((line = rd.readLine()) != null) {
                        //oldLine = oldLine + line;
                        sb.append(line);
                    }
                    oldLine =  sb.toString();
    
    Viele Grüße
    Chris
     
  4. funcoder, 24.09.2011 #4
    funcoder

    funcoder Erfahrener Benutzer

    Wem die Ursachen für das "Phänomen" interessieren, dem empfehle ich einen Blick auf diesem Blog-Artikel zu werfen.
    Lohnt sich! Performance ist nun mal ein wichtiger Nennwert bei der User-Experience und entscheidet nicht selten ob eine Applikation beim Benutzer ankommt oder aber direkt deinstalliert wird.
     
    Tom299 und ChrisMobile gefällt das.
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[ERLEDIGT] Eingabe auf Webseite über API mit Smartphone autorisieren Android App Entwicklung 31.05.2017
[OFFEN] Barcodescan und Übergabe an Webseite Android App Entwicklung 18.05.2017
Display-Breite zum App-Start auslesen Android App Entwicklung 11.03.2017
Excel Dokument mithilfe von JExcelAPI auslesen funktioniert nicht :/ Android App Entwicklung 02.03.2017
SQLite auslesen und in Tabelle darstellen Android App Entwicklung 12.10.2016
Textfeld in einer App auslesen Android App Entwicklung 02.10.2016
Du betrachtest das Thema "Auslesen einer Webseite beschleunigen" im Forum "Android App Entwicklung",