Обычно это называется неопределенным индикатором хода выполнения или диалоговым окном неопределенного хода выполнения.
Объедините это с Thread и Handler , чтобы получить именно то, что вы хотите. Есть несколько примеров того, как это сделать через Google или прямо здесь, на SO. Я очень рекомендую потратить время, чтобы научиться использовать эту комбинацию классов для выполнения такой задачи. Он невероятно полезен во многих типах приложений и поможет вам понять, как потоки и обработчики могут работать вместе.
Я расскажу вам, как это работает:
Событие загрузки запускает диалоговое окно:
//maybe in onCreate
showDialog(MY_LOADING_DIALOG);
fooThread = new FooThread(handler);
fooThread.start();
Теперь поток делает работу:
private class FooThread extends Thread {
Handler mHandler;
FooThread(Handler h) {
mHandler = h;
}
public void run() {
//Do all my work here....you might need a loop for this
Message msg = mHandler.obtainMessage();
Bundle b = new Bundle();
b.putInt("state", 1);
msg.setData(b);
mHandler.sendMessage(msg);
}
}
Наконец получить состояние обратно из потока, когда оно будет завершено:
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
int state = msg.getData().getInt("state");
if (state == 1){
dismissDialog(MY_LOADING_DIALOG);
removeDialog(MY_LOADING_DIALOG);
}
}
};