我需要关于登录过程代码基本架构的帮助。我正在实施Async Http处理以使ICS工作。
这段代码的目的是用于登录到我的应用程序。
它目前的基本工作方式如下: Login.java:
这段代码的目的是用于登录到我的应用程序。
- 从UI提交登录表单(Login.java)
- 通过http get XML结果连接到我们的服务器并传递用户名/密码
- 将XML结果解析为数组。(ParseXML.java)
- 在UI中显示结果反馈。
它目前的基本工作方式如下: 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 解析、异步)。
特别是我担心从 onPostExecute() 回调到 Login.doFinished() 是否会导致内存问题?我担心这会导致 ParseXML 对象避免垃圾回收,因为它现在返回到 Login Activity,并在用户登录后继续运行,从而保持 ParseXML 开启。
我来自 PHP 背景,所以一直试图将所有的 XML 解析和 HTTP 处理保存在 ParseXML
“模块”中,这样我就知道在哪里寻找更改。
目前,ParseXML
处理所有的 HTTP 工作,例如 getUsers
、getChannels
、addUser
、delUser
、doLogin
等。但我是否应该尝试将处理 XML 和 HTTP 连接(异步)的所有代码移动到相关屏幕/活动中,使其自包含?
我非常感谢您的帮助。