диалоговое окно прогресса в основном действии onCreate не отображается

После заставки требуется около 6 секунд для загрузки содержимого onCreate в основном действии. Итак, я хочу показать диалоговое окно прогресса при загрузке, и вот что я сделал:

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 секунд, а затем загружается основная раскладка. Не знаю, что я сделал не так :*(


person Manto    schedule 05.06.2012    source источник
comment
Все, что вы делаете в ---some code---, блокирует поток пользовательского интерфейса. Вместо этого рассмотрите возможность использования AsyncTask. developer.android.com/reference/android/os/AsyncTask.html   -  person Squonk    schedule 06.06.2012


Ответы (3)


Вам нужно запустить свой загруженный код в другом потоке (не в потоке пользовательского интерфейса).
В своей деятельности создайте 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();
person timaschew    schedule 05.06.2012

Это потому, что вы делаете все в потоке пользовательского интерфейса, тем самым блокируя его.

Вы должны выполнять всю свою тяжелую работу в отдельном потоке и обновлять диалоговое окно прогресса через него.

person Cruceo    schedule 05.06.2012

Я изменил флаг отладки на true в AndroidManifest.xml.

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