我有一个应用程序可以加载一个对话框,其中包含在对话框的 XML 布局中指定的一些图像。我已经阅读了很多关于在 Android 中使用图像并注意 VM 预算的内容,因此我认为任何可能占用大量内存的图像处理都应该在主线程之外处理。话虽如此,我想知道使用 ASyncTask 从 UI 线程加载整个布局是否明智。我有一个有效的代码,但我无法通过一些谷歌搜索来确定这是否是一个好的做法。这是下面的代码。
这是在用户按下按钮加载对话框时触发的 case 语句。
case R.id.showDialog:
vibrator.vibrate(vibrateMilis);
mDialog = new Dialog(getActivity(), R.style.CustomDialog);
new LoadLayout().execute("");
break;
这是 ASyncTask
private class LoadLayout extends AsyncTask<String, Void, String>
{
ProgressDialog progressDialog;
@Override
protected String doInBackground(String... params)
{
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setContentView(R.layout.dialog_layout);
mDialog.setCancelable(true);
return null;
}
@Override
protected void onPostExecute(String result)
{
progressDialog.cancel();
mDialog.show();
}
@Override
protected void onPreExecute()
{
progressDialog = new ProgressDialog(
getActivity());
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
progressDialog.show();
}
@Override
protected void onProgressUpdate(Void... values)
{
// Do nothing
}
}
所以这段代码有效,但我的问题是这个。这被认为是好的做法吗?对我来说这似乎有点老套。我没有在多次谷歌搜索中遇到这个问题,所以这就是我有点担心的原因。我的意思是,如果这是一个很好的做法,它就会被记录在某处,对吗?
感谢任何输入。
最佳答案
您是否引用过 android 开发者网站。你的方法是错误的。更多指导请引用Vogella文档。它很好地解释了 AsyncTask。
另请参阅下面的 AsyncTask 示例代码。
// The definition of our task class
private class PostTask extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
displayProgressBar("Downloading...");
}
@Override
protected String doInBackground(String... params) {
String url=params[0];
// Dummy code
for (int i = 0; i <= 100; i += 5) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i);
}
return "All Done!";
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
updateProgressBar(values[0]);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
dismissProgressBar();
}
}
希望对您有所帮助。
享受编码......:)
关于android - 在 Android 中使用 ASyncTask 加载布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281555/