Android AsyncTask и передача объектов
Мне нужна помощь по базовой архитектуре моего кода в процессе входа в систему. Я внедряю обработку Async Http, чтобы все работало на ICS.
Цель этого кода - войти в мое приложение.
Login form submit from UI (Login.java) connect to our server and pass username / password via http get XML result parse XML results to array. (ParseXML.java) display result feedback in UI.Теперь все это сработало в моей программе, однако после попытки тестирования с ICS, которая обеспечивает HTTP-соединения Asyc, я быстро осознал свою проблему и заставил усомниться во всем моем дизайне ...
основной способ, которым это в настоящее время работает:
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);
}
}
}
Меня больше всего беспокоит то, что это плохой дизайн, и я должен просто переместить код соединения XML и http в мой файл Login.java, чтобы он был включен (UI, HTTP, XML Parsing, Asyc).
Particularly i'm concerned with calling back to Login.doFinished() от onPostExecute (). это плохо для памяти? Я обеспокоен тем, что это может привести к тому, что объект ParseXML избежит сбора мусора, поскольку теперь он возвращается к действию входа в систему, которое будет продолжаться, как только пользователь войдет в свою очередь, удерживая ParseXML открытым.
Я пришел из PHP, поэтому я пытался сохранить весь мой анализ XML и обработку HTTP в пределахParseXML
& Quot; модуль & Quot; так что я знаю, где искать изменения в этом.
В данный моментParseXML
обрабатывает всю работу http, т.е.getUsers
, getChannels
, addUser
, delUser
, doLogin
и т. д. Но стоит ли пытаться переместить весь код для обработки XML и HTTP-соединений (асинхронных) в пределах соответствующего экрана / действия, чтобы они были автономными?
Я действительно ценю любую помощь в этом