時間が掛かる処理を動かす場合、処理中を示すのインジケータ画像(?)や、パーセントなどユーザに処理進捗状況をフィードバックするべきです。
Androidにおいては、専用のProgressDialogという仕組みがあるため
画面に表示する文字を設定すれば、画面にインジケータ画像ぽいものを
短時間で表示できます。
環境
・Android API Level9(2.3)で開発しています。
処理例
・画面上に配置したボタンを押下して処理開始
・ボタン押下時に、ProgressDialog表示
・非同期で処理を開始
・処理終了時に、ProgressDialog非表示
MainActivity.java
//ボタン表示
Button submit = (Button) findViewById(R.id.regist);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String input = get_depost_json();
final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("通信待機中・・・");
progressDialog.setMessage("登録しています。");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setCancelable(false);
progressDialog.show();
new AsyncTask<Void, Void, Integer>() {
@Override
protected Integer doInBackground(Void... p) {
//通信の処理(結果をレスポンスコードの数値で返す)
return 200;
}
@Override
protected void onPostExecute(Integer res_code) {
if (res_code == 200) {
progressDialog.hide();
Toast.makeText(MainActivity.this, "登録が完了しました。", Toast.LENGTH_SHORT).show();
} else {
progressDialog.hide();
Toast.makeText(MainActivity.this, "登録に失敗しました。", Toast.LENGTH_SHORT).show();
}
}
}.execute();
}
});
ボタンのイベントハンドラから呼ぶ、OnClickは同期処理となるので
Dialogを表示する処理を書いた上で、非同期で(Asyncを用いて)
処理を動かす必要がありました。
この例では、ぐるぐる回るインジケータ画像を表示するだけですが
進捗状況を可視化できる仕組みを検討いたします。