ダイアログの XML レイアウトで指定されたいくつかの画像を含むダイアログをロードするアプリケーションがあります。Android でイメージを使用し、VM の予算に注意することについてよく読んだので、かなりの量のメモリを占有する可能性のあるイメージの処理は、メイン スレッドから切り離して処理する必要があると思います。そうは言っても、ASyncTask を使用して UI スレッドからレイアウト全体をロードするのが賢明かどうか疑問に思っていました。私は動作するコードを持っていますが、いくつかの Google 検索でこれが良い習慣であるかどうかを知ることができませんでした. これが以下のコードです。
これは、ユーザーがボタンを押してダイアログをロードしたときにトリガーされる 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
}
}
したがって、このコードは機能しますが、私が持っている質問はこれです。これは良い習慣と考えられますか? 私の好みでは少しハッキーなようです。複数のGoogle検索でこれに遭遇しなかったので、少し心配です. もしそれが良い習慣だったら、どこかに文書化されていただろうか?
ご意見ありがとうございます。