1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Frage zu Threadaufruf

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von FireDragon, 02.12.2010.

  1. FireDragon, 02.12.2010 #1
    FireDragon

    FireDragon Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    7
    Registriert seit:
    07.10.2010
    Hiho,
    ich hab mal eine Frage bezüglich Threads.
    Macht es einen Unterschied ob ich einen Methodenaufruf in einen Thread setzte, oder ob ich den Thread innerhalb der Methode erst öffne?

    Beispiel:
    Code:
            new Thread(new Runnable() {
                public void run() {
                  methode_aufrufen();
             }}).start();
    vs.

    Code:
    public void methode(){
            new Thread(new Runnable() {
                public void run() {
                  //tue das was in der Methode gemacht werden sollte
             }}).start();
    Meiner Meinung nach macht es mehr Sinn, den Methodenaufruf in einen Thread zu packen, leider empfinde ich dies nicht als "gut aussehenden" Programmierstil..

    Grüße
    FireDragon
     
    Zuletzt bearbeitet: 05.12.2010
  2. DieGoldeneMitte, 02.12.2010 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Ich wäre für Methode #1.


    • Dort hat denn der Stackframe, in dem die Methode ausgewetet wird, (hoffentlich ;)) einen selbstredenden Namen "meineklasse.meine_methode". In Fall #2 stünde da meineklasse.anonymeklasse.run().
    • Das gibt im Falle von Exceptions besser lesbare Fehlermeldungen.
    • Die Methode könnte überladen werden, ohne dass man den Threadaufruf duplizieren müsste.
    • The Methode kann aus verschiedenen Kontexten wahlweise normal oder deferred aufgerufen werden.
    • Und dass das "hässlicher" wäre sehe ICH zumindest nicht so. ;)
    ADD: Wenn die Funktion an mehreren Stellen als Thread ausgewetet werden soll, würde ich sogar noch weiter gehen und es so machen:
    Code:
    defer_xyz() {
      new Thread( new Runnable() {
        public void run() {
          xyz();
        }
      }).start();
    }
    
    xyz() {
     ....
    }
    
     
    Zuletzt bearbeitet: 02.12.2010
    FireDragon bedankt sich.
  3. FireDragon, 03.12.2010 #3
    FireDragon

    FireDragon Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    7
    Registriert seit:
    07.10.2010
    Oke danke, das sind einige Vorteile.

    Ich habe gelesen, dass man Threads die auf Eigenschaften von Views zugreifen, besonders beachten soll.
    Mittels view.post(new Runnable
    soll dann in dem Thread auf View-Werten zugegriffen werden.

    Leider führt die App dann nicht mehr meine Befehle für eine ListView aus die dort drinnen stehen..
    Code:
    list.post(new Runnable() {
                public void run() {
                   list.setAdapter(listAdapter); 
                   list.setOnItemClickListener(new OnItemClickListener() {
                             public void onItemClick(AdapterView<?> parent, View 
                                                            view, int position, long id) {
                             list.setVisibility(4);
                           ...
    
    Grüße
    FireDragon
     
    Zuletzt bearbeitet: 05.12.2010
  4. FireDragon, 05.12.2010 #4
    FireDragon

    FireDragon Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    7
    Registriert seit:
    07.10.2010
    Ich bin mal so frech, und pushe diesen Thread :)

    Hab hin und her gegoogelt aber irgentwie keine vernünftige Erklärung/Tutorial gefunden.

    Könnte mir jmd ein kurzes Beispiel/ Erklärung geben wie man Threads nun sinnvoll einsetzten soll?

    Sollten kleinere GUI Updates(z.B. einstellen der View Eigenschaften) beim Starten einer Activity in einen Thread? Oder ist es seitens der Perfomance nicht förderlich, wenn man nur KLEINE(2-3 Zeilige) Aktionen durchführt?

    Warum wird meine ListView von oben nicht erstellt, wenn ich sie in View.post(..) mit Inhalt fülle?

    Welche Art von View Änderungen sollte man mit View.post(..) durchführen

    Grüße
    FireDragon
     
    Zuletzt bearbeitet: 06.12.2010
  5. miha, 05.12.2010 #5
    miha

    miha Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    43
    Registriert seit:
    12.01.2010
    Wofür mehrere Threads: z.B. Daten laden - ohne Extra-Thread kommt ganz schnell der Wait/Force Close-Dialog vom System wenn der Gui-Main-Thread nicht reagiert für ein paar Sekunden.
     
  6. Fr4gg0r, 06.12.2010 #6
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    aber nur wenn der User wie ein ungeduldiger Affe auf der UI herumhämmert. :w00t00:
     
  7. miha, 06.12.2010 #7
    miha

    miha Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    43
    Registriert seit:
    12.01.2010
    Ist das nicht die deutsche Übersetzung von User? :tongue:
     
  8. FireDragon, 06.12.2010 #8
    FireDragon

    FireDragon Threadstarter Neuer Benutzer

    Beiträge:
    22
    Erhaltene Danke:
    7
    Registriert seit:
    07.10.2010
    hm das war nicht wirklich eine passende Antwort zu meinen Fragen :huh:
     
  9. miha, 06.12.2010 #9
    miha

    miha Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    43
    Registriert seit:
    12.01.2010
    Darauf war meine Antwort bezogen ... Sowas hier:

    Creating Dialogs | Android Developers-> Example ProgressDialog with a second thread

    Das beantwortet nicht deine anderen Fragen oben zum Listview (von denen ich keine Ahnung habe) aber dass die Frage ob Thread oder nicht nicht an der Anzahl Code-Zeilen liegt sondern an der benötigten Ausführungszeit sollte auch das zeigen.
     
    Zuletzt bearbeitet: 06.12.2010

Diese Seite empfehlen