android - 如何在 android 的线程中运行我的函数?

标签 android user-interface dialog progress

我有一个动态创建所有用户界面的函数。

如何在我的函数执行时显示对话框进度,然后在我的函数完成用户界面时关闭对话框?

这是我的代码示例:

对不起,我是android的新手,我很难理解一些代码......我会在这里写我的代码......

我有这个功能:

 public void principal() {
        //CODE TO CREATE ALL THE USER INTERFACE DYNAMICALLY
    }

我有这样的 asyncTask:

public class EjecutarTarea extends AsyncTask<Void, Void, Void>
{
    protected void onPreExecute() {
        dialog = new ProgressDialog(StadioNenaActivity.this);
        dialog.setMessage("Cargando..");
        dialog.setIndeterminate(true);
        dialog.setCancelable(false);
        dialog.show();
    }


    protected Void doInBackground(Void... unused) {


        Principal();
        return null;
    }

    @Override
    protected void onProgressUpdate(Void... unused) {

    }

    @Override
    protected void onPostExecute(Void unused) {

        dialog.dismiss();
    }
  }

当我在 onCreate 中执行异步任务时,它崩溃了:

new EjecutarTarea().execute();

最佳答案

使用 AsyncTask .它提供了一种在后台加载内容并将 View 粘贴到主线程中的奇妙而简单的方法。

这是我的 AsyncTask 的示例:

private class LoadingTask extends AsyncTask<Void, Integer, Void> {
        private ProgressBar mProg;
        private TextView mLoadingText;

        @Override protected void onPreExecute() {
            mProg = (ProgressBar)findViewById(R.id.launcherbar_loadprogress);
            mProg.setTouchDelegate(null);
            mProg.setClickable(false);
            mProg.setLongClickable(false);
            mProg.setOnTouchListener(null);
            mProg.setMax(100);

            mLoadingText = (TextView) findViewById(R.id.launcheractivity_loadingwhat);
        }

        @Override protected Void doInBackground(Void... voids) {
            try { Thread.sleep(1000); } catch (InterruptedException e) { }

            setProgressAndSleep(R.string.loading_log, 29, 250);
            LOG.setContext(LauncherActivity.this);
            LOG.setDebug(true);

            setProgressAndSleep(R.string.loading_database, 43, 250);
            AppionDatabase.setContext(LauncherActivity.this);

            setProgressAndSleep(R.string.loading_sensors, 57, 250);
            Sensor.init(LauncherActivity.this);

            setProgressAndSleep(R.string.loading_jobs, 71, 250);
            Job.init(LauncherActivity.this);

            setProgressAndSleep(R.string.loading_workbenches, 86, 250);
            WorkbenchState.init(LauncherActivity.this);

            setProgressAndSleep(R.string.loading_application_state, 100, 250);
            ApplicationState.setContext(LauncherActivity.this);
            startService(new Intent(LauncherActivity.this, BluetoothConnectionService.class));

            return null;
        }

        @Override public void onProgressUpdate(Integer... prog) {
            mLoadingText.setText(prog[0]);
            mProg.setProgress(prog[1]);
        }

        @Override public void onPostExecute(Void voids) {
            startActivity(new Intent(LauncherActivity.this, HomescreenActivity.class));
        }

        private void setProgressAndSleep(int text, int progress, int duration) {
            try {
                publishProgress(new Integer[] {text, progress});
                Thread.sleep(duration);
            } catch (InterruptedException e) {
                LOG.e(TAG, "Failed to sleep thread while loading Application Contexts!", e);
            }
        }
    }

编辑注意我建议不要保留 setProgressAndSleep(int, int int) 方法。我只使用它是因为它加载速度太快,我真的很想要加载栏。 :-P

关于android - 如何在 android 的线程中运行我的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730404/

相关文章:

android - 如何更改 Robospice/Jackson 中的根 JSON 数组元素名称?

android - Android 导航组件中的叠加 fragment

c# - 为什么在 UI 中使用 DataTable 是错误的?

Java GUI - 定位

Android EditTextPreference 对话框样式/主题

android - Kotlin:可空属性委托(delegate)可观察

android - 如何根据数据动态生成 jUnit 测试

c++ - 用 C++ 设计前端/后端系统?

windows - 是否可以避免对话框函数中的静态或全局变量

javascript - Jquery 对话框 对话框不是一个函数