Android 主活动中的进度对话框';s onCreate未显示

Android 主活动中的进度对话框';s onCreate未显示,android,dialog,progressdialog,oncreate,Android,Dialog,Progressdialog,Oncreate,启动屏幕后,在主活动中加载onCreate内容大约需要6秒钟。因此,我想在加载时显示一个进度对话框,下面是我所做的: import ... private ProgressDialog mainProgress; public void onCreate(Bundle davedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); mProgress =

启动屏幕后,在主活动中加载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线程)中启动繁忙的代码)。
在活动中创建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();

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


您应该在一个单独的线程中完成所有繁重的工作,并通过在AndroidManifest.xml中将debugable标志更改为true来更新进度对话框

android:icon="@drawable/icon" 
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    android:debuggable="true"

不管你在<代码>中做什么---一些代码--<代码>阻塞了UI线程。考虑使用<代码> AycCastase<代码>。