Вот несколько бит кода:Используя нить, чтобы показать диалог прогресса в Android
public class ShowDialog extends Thread {
private static String mTitle="Please wait";
private static String mText="Loading...";
private Activity mActivity;
private ProgressDialog mDialog;
ShowDialog(Activity activity) {
this(activity, mTitle, mText);
}
ShowDialog(Activity activity, String title) {
this(activity, title, mText);
}
ShowDialog(Activity activity, String title, String text) {
super();
mText=text;
mTitle=title;
mActivity=activity;
if (mDialog == null) {
mDialog = new ProgressDialog(mActivity);
mDialog.setTitle(mTitle);
mDialog.setMessage(mText);
mDialog.setIndeterminate(true);
mDialog.setCancelable(true);
mDialog.setOnCancelListener(
new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
mDialog.dismiss();
interrupt();
}
});
}
}
public void run() {
mDialog.show();
while(!isInterrupted())
mDialog.dismiss();
mDialog=null;
}
}
И в моей основной деятельности:
ShowDialog show = new ShowDialog(this, "Please wait!","Loading badly...");
show.start();
SystemClock.sleep(2000);
show.interrupt();
Я знаю, что я мог бы используйте асинхронную задачу и все, но это не то, что я хочу. Замените SystemClock.sleep тем, что занимает некоторое время. Идея состоит в том, чтобы выполнить код между запуском и прерыванием в потоке пользовательского интерфейса и сделать отдельный поток, обрабатывающий ProgressDialog. Что случилось с моей нитью?
Большое спасибо!
Итак, вместо Thread.start() Мне нужно использовать Thread.join()? –
@Flav - Нет, вызовите 'show.join()' вместо вашего оператора 'sleep'. Но теперь я вижу, что вы пытаетесь сделать здесь. Обновленный ответ для последующего ... – ziesemer