Android AsyncTask i przekazywanie obiektów

Potrzebuję pomocy na temat podstawowej architektury mojego kodu wokół procesu logowania. Wdrażam przetwarzanie Async Http, aby wszystko działało na ICS.

Celem tego kodu jest zalogowanie się do mojej aplikacji.

Formularz logowania przesłać z interfejsu użytkownika (Login.java)połącz się z naszym serwerem i przekaż nazwę użytkownika / hasło przez http pobierz wynik XMLanalizować wyniki XML do tablicy. (ParseXML.java)wyświetlanie wyników w interfejsie użytkownika.

Teraz to wszystko zadziałało w moim programie, ale po próbie przetestowania z ICS, który wymusza połączenia HTTP Asyca szybko zrozumiałem mój problem i skłonił mnie do zwątpienia w cały mój projekt ...

podstawowy sposób, w jaki obecnie działa:

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);
      }
    }
  }

Jestem głównie zaniepokojony tym, że jego zły projekt polega na robieniu rzeczy w ten sposób i powinienem po prostu przenieść kod połączenia XML i http w obrębie mojego pliku Login.java, tak aby wszystko było włączone (UI, HTTP, XML Parsing, Asyc).

Szczególnie zależy mi na oddzwonieniu do Login.doFinished () z onPostExecute (). czy to źle dla pamięci? Obawiam się, że spowodowałoby to, że obiekt ParseXML uniknąłby usuwania śmieci, ponieważ teraz wraca do aktywności logowania, która będzie kontynuowana po zalogowaniu użytkownika, który z kolei trzyma ParseXML otwarty.

Pochodzę z tła PHP, więc próbowałem zachować cały mój parsowanie XML i przetwarzanie HTTP wParseXML „moduł”, dzięki czemu wiem, gdzie szukać zmian.

W tym momencieParseXML obsługuje wszystkie prace http, tj.getUsers, getChannels, addUser, delUser, doLogin itd. Ale czy powinienem spróbować przenieść cały kod do obsługi połączeń XML i HTTP (asynchronicznych) w obrębie odpowiedniego ekranu / działania, aby były one autonomiczne?

Naprawdę doceniam każdą pomoc w tym zakresie

questionAnswers(3)

yourAnswerToTheQuestion