android - 在 Android 中使用 ASyncTask 加载布局

标签 android android-layout android-asynctask android-xml android-dialog

我有一个应用程序可以加载一个对话框,其中包含在对话框的 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/

相关文章:

android - 如何在 Android 中生成加载屏幕?

来自 asyncTask 的 Android 致命信号 6 (SIGABRT)

java - 如何检查 Android 中的互联网访问是否可用

android - 动画期间在设备上 react native android崩溃

android - 模拟器与我的 Activity 布局不匹配

Android- 多个微调器

android - 为什么在 Android 绑定(bind)示例中 Google 使用 val 绑定(bind)和 var _binding?

android - 当我从列表中选择一个项目时回来

java - 我手动强制退出应用程序并重新启动后,异步任务不会调用 OnPostExecute 或 onProgressUpdate

java - 无法从 AsyncTask 启动 WebView