1. Nimm jetzt an unserem Geotel Note - Gewinnspiel teil - Informationen zum Note 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 haben sich bedankt.
Die Seite wird geladen...
Ähnliche Themen - Auslesen einer Webseite Forum Datum
Textfeld in einer App auslesen Android App Entwicklung 02.10.2016
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
Uri oder File path als String speichern zum wiederauslesen Android App Entwicklung 26.01.2017
SQLite auslesen und in Tabelle darstellen Android App Entwicklung 12.10.2016
Textdatei auf SD Karte auslesen funktioniert nicht (Oneplus One) Android App Entwicklung 24.08.2016
Sensoren bzw Infos auslesen. Android App Entwicklung 05.08.2016
[ERLEDIGT] *.viivo kann keiner App zugeordnet werden - MANIFEST.XML ? Android App Entwicklung Freitag um 10:35 Uhr
[OFFEN] Screen einer anderen App aufnehmen und auswerten Android App Entwicklung 06.04.2017
[OFFEN] Klick auf Marker soll ein zweites kleineres Layout anzeigen, Map soll trotzdem noch scrollbar (verwendbar) sein Android App Entwicklung 04.04.2017