private class BackgroundLoginTask extends
AsyncTask<InputStream, Void, Boolean> {
@Override
protected void onPreExecute() {
// do something before..
// Disable the UI-Elements during the login progress
pbar.setVisibility(View.VISIBLE);
editPassword.setEnabled(false);
editUsername.setEnabled(false);
btnLogin.setEnabled(false);
}
@Override
protected Boolean doInBackground(final InputStream... params) {
//do the network access
}
@Override
protected void onPostExecute(final Boolean parsingError) {
// enable the UI-Elements when the login was successful
editPassword.setEnabled(true);
editUsername.setEnabled(true);
btnLogin.setEnabled(true);
// hide the progress bar
pbar.setVisibility(View.INVISIBLE);
}
}
この小さな例では、AsyncTask がどのように機能するかを確認できます。3 つのメソッドをオーバーライドできます。バックグラウンド プロセスを開始する前に呼び出されるもの、アクセスを実行するもの、バックグラウンド プロセスを実行した後に呼び出されるものがあります。私の例では、UI 要素を無効にし、ネットワーク アクセスを行う前に進行状況バーを表示します。アクセス後、onPostExecute メソッドで UI 要素を有効にし、プログレスバーを無効にします。
次の抜粋されたコードでは、AsyncTask を呼び出す方法を確認できます。
public final void login(final View view) {
BackgroundLoginTask task = new BackgroundLoginTask();
task.execute();
}
この例がお役に立てば幸いです。