主活动中的进度对话框在onCreate方法中没有显示。

3

启动画面后,主活动的onCreate内容需要大约6秒钟才能加载完毕。因此,我想在加载期间显示进度对话框,具体操作如下:

import ...

private ProgressDialog mainProgress;

public void onCreate(Bundle davedInstanceState){
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    mProgress = new ProgressDialog (Main.this);
    mProgress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    mProgress.setMessage("Loading... please wait");
    mProgress.setIndeterminate(false);
    mProgress.setMax(100);
    mProgress.setProgress(0);
    mProgress.show();

    ---some code---

    mProgress.setProgress(50);

    ---some code---

    mProgress.setProgress(100);
    mProgress.dismiss();
}

它不起作用...屏幕黑屏5-6秒,然后加载主布局。我不知道哪一部分出了错:*(


无论你在 ---一些代码--- 中做什么都会阻塞UI线程。考虑使用AsyncTask代替。http://developer.android.com/reference/android/os/AsyncTask.html - Squonk
2个回答

3

您需要在另一个线程中启动繁忙的代码(而不是UI线程)。


在您的活动中创建ProgressDialog,并在该线程中关闭它。

mProgress = new ProgressDialog (Main.this);

Runnable runnable = new Runnable() {
    @Override
    public void run() {
        // code that needs 6 seconds for execution

        // after finishing, close the progress bar
        mProgress.dismiss();
    }
};

new Thread(runnable).start();

1

这是因为您正在UI线程上执行所有操作,从而阻塞了它。

您应该在单独的线程中完成所有繁重的工作,并通过该线程更新进度对话框。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接