Android AsyncTask und Objektübergabe

Ich benötige Hilfe zur grundlegenden Architektur meines Codes rund um den Anmeldevorgang. Ich implementiere die asynchrone HTTP-Verarbeitung, um die Funktionsweise von ICS zu verbessern.

Das Ziel dieses Codes ist das Einloggen in meine App.

Anmeldeformular über die Benutzeroberfläche senden (Login.java)Stellen Sie eine Verbindung zu unserem Server her und geben Sie Ihren Benutzernamen / Ihr Passwort über http ein, um das XML-Ergebnis zu erhaltenAnalysiert XML-Ergebnisse in ein Array. (ParseXML.java)Ergebnis-Feedback in der Benutzeroberfläche anzeigen.

Jetzt funktionierte das alles in meinem Programm, aber nachdem ich versucht hatte, mit ICS zu testen, das Asyc-HTTP-Verbindungen erzwingt, erkannte ich schnell mein Problem und ließ mich an meinem gesamten Design zweifeln ...

Die grundlegende Art und Weise, wie es derzeit funktioniert:

Login.java:

  class Login {
    ...
    ParseXML myXMLParser = new ParseXML();  
    myXMLParser.doLogin(username, password, Login.this);    

    public doFinished(result) {
      // update UI
    }
    ...
  }

ParseXML.java:

  class ParseXML {
    // class variable to hold login object for async to access
    public Login loginObj;
    ...
    public void doLogin(String _username, String _password, Login _l) {
      loginObj = (Login) _l;
      ...

      // create loginUrl string to run through async
      ...
      new DownloadFilesTask().execute(loginUrl);
    }

    class DownloadFilesTask extends AsyncTask<a, b, c> {
      doInBackground() {
        // do stuff
        // download result of http call
        // parse XML
      }

      onPostExecute(result) {        
        // call the public class variable of login object i have and tell it to update the UI
        // pass back the result array.
        loginObj.doFinished(result);
      }
    }
  }

Ich mache mir hauptsächlich Sorgen darüber, dass es schlecht ist, Dinge auf diese Weise zu tun, und ich sollte einfach den XML- und den http-Verbindungscode in meine Login.java-Datei verschieben, damit alles enthalten ist (Benutzeroberfläche, HTTP, XML-Analyse, Asyc).

Besonders interessiert mich der Rückruf zu Login.doFinished () von onPostExecute (). Ist das schlecht für das Gedächtnis? Ich mache mir Sorgen, dass das ParseXML-Objekt die Garbage Collection vermeiden könnte, da es jetzt wieder zur Anmeldeaktivität zurückkehrt, die ausgeführt wird, sobald der Benutzer angemeldet ist und ParseXML geöffnet hält.

Ich komme aus einem PHP-Hintergrund, daher habe ich versucht, alle meine XML-Parsing- und HTTP-Verarbeitungen in der zu behaltenParseXML "Modul", damit ich weiß, wo ich nach Änderungen suchen soll.

Im MomentParseXML erledigt alle http-Arbeiten, dhgetUsers, getChannels, addUser, delUser, doLogin usw. Aber sollte ich versuchen, den gesamten Code so zu verschieben, dass er mit XML- und HTTP-Verbindungen (asynchron) innerhalb des jeweiligen Bildschirms / der jeweiligen Aktivität umgeht, damit sie in sich geschlossen sind?

Ich bin für jede Hilfe sehr dankbar

Antworten auf die Frage(3)

Ihre Antwort auf die Frage