ログイン プロセスに関するコードの基本的なアーキテクチャについて、助けが必要です。ICS で動作するように Async Http 処理を実装しています。
このコードの目的は、アプリにログインすることです。
- UI (Login.java) から送信されたログイン フォーム
- 私たちのサーバーに接続し、http経由でユーザー名/パスワードを渡し、XML結果を取得します
- XML 結果を配列に解析します。(ParseXML.java)
- 結果のフィードバックを UI に表示します。
これですべてがプログラムで機能しましたが、Asyc HTTP 接続を強制する ICS でテストしようとした後、すぐに問題に気づき、設計全体を疑うようになりました...
現在の基本的な動作方法:
ログイン.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);
}
}
}
私は主に、その悪い設計がこのように行われていることを懸念しており、Login.java ファイル内の XML および http 接続コードを移動して、すべてが含まれるようにする必要があります (UI、HTTP、XML 解析、Asyc)。
特に、onPostExecute() から Login.doFinished() にコールバックすることに関心があります。これはメモリに悪いですか?ParseXML オブジェクトがガベージ コレクションを回避するのではないかと心配しています。これは、ユーザーがログインして ParseXML を開いたままにしておくと、ログイン アクティビティが引き続き実行されるためです。
私は PHP のバックグラウンドを持っているので、すべての XML 解析と HTTP 処理をParseXML
「モジュール」内に保持して、これに対する変更を探す場所がわかるようにしています。
現時点では、、、、などParseXML
のすべての http 作業を処理しています。しかし、関連する画面/アクティビティ内で XML および HTTP 接続 (非同期) を処理するようにすべてのコードを移動して、自己完結型にする必要がありますか?getUsers
getChannels
addUser
delUser
doLogin
これについて何か助けていただければ幸いです