私はAndroidで何かに取り組んでいます。アクセスすると、メニューが表示され、サーバーからかなり大きなユーザー リスト (500 以上) が要求され、約 5 秒かかります。この間、アプリケーションはフリーズします。ユーザーが何かが起こっていることを認識し、それが完了するまでそれに触れることができないプログレス hud (MBProgressHud など) を表示するにはどうすればよいですか。
MBProgressHud:
私はAndroidで何かに取り組んでいます。アクセスすると、メニューが表示され、サーバーからかなり大きなユーザー リスト (500 以上) が要求され、約 5 秒かかります。この間、アプリケーションはフリーズします。ユーザーが何かが起こっていることを認識し、それが完了するまでそれに触れることができないプログレス hud (MBProgressHud など) を表示するにはどうすればよいですか。
MBProgressHud:
AsyncTaskを使用します:
public class MyAsyncTask extends AsyncTask<Void, Void, Result>{
private Activity activity;
private ProgressDialog progressDialog;
public MyAsyncTask(Activity activity) {
super();
this.activity = activity;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(activity, "Loading", "Loading", true);
}
@Override
protected Result doInBackground(Void... v) {
//do your stuff here
return null;
}
@Override
protected void onPostExecute(Result result) {
progressDialog.dismiss();
Toast.makeText(activity.getApplicationContext(), "Finished.",
Toast.LENGTH_LONG).show();
}
}
アクティビティから呼び出します。
MyAsyncTask task = new AsyncTask(myActivity.this);
task.execute();
この機能を使用AsyncTask
して実現する必要があります。ProgressDialog
別のスレッドで重労働 (Web 呼び出し) をオフロードし、UI スレッドを ANR (アプリケーション応答なし) から解放します。
詳細については、この回答をお読みください。