【发布时间】:2012-08-16 14:31:19
【问题描述】:
我正在 Android 上做一些事情。将有一个菜单,当访问时,从服务器(500+)请求相当大的用户列表,大约需要 5 秒。在此期间,应用程序冻结。如何在用户知道正在发生某些事情并且在完成之前无法触摸它的地方显示进度 hud(如 MBProgressHud)。
MBProgressHud:
【问题讨论】:
标签: android
我正在 Android 上做一些事情。将有一个菜单,当访问时,从服务器(500+)请求相当大的用户列表,大约需要 5 秒。在此期间,应用程序冻结。如何在用户知道正在发生某些事情并且在完成之前无法触摸它的地方显示进度 hud(如 MBProgressHud)。
MBProgressHud:
【问题讨论】:
标签: android
使用异步任务:
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 来实现此功能。它将在单独的线程上卸载繁重的工作(网络调用),将您的 UI 线程设置为不受 ANR(应用程序无响应)的影响。
欲了解更多信息,请阅读this 答案。
【讨论】: