Когда я получил вопрос Зака - он спрашивает, как выполнить некоторый код, который включает изменения пользовательского интерфейса (что-то вроде отображения всплывающей информации или закрытия всплывающего окна) после завершения фонового потока.На Android Handler
, созданный в потоке пользовательского интерфейса, часто используется для этой цели.
В BB вы можете использовать другой способ, аналогичный Swing на настольной Java.Когда вам нужно выполнить некоторый код в потоке пользовательского интерфейса, вы заключаете его в Runnable
и переходите к одному из следующих методов:
// Puts runnable object into this application's event queue,
// and waits until it is processed.
Application.invokeAndWait(Runnable runnable)
// Puts runnable object into this application's event queue.
Application.invokeLater(Runnable runnable)
// Puts runnable object into this application's event queue
// for repeated execution.
Application.invokeLater(Runnable runnable, long time, boolean repeat)
Так что поведение вышеупомянутых вызовов похоже на то, что Handler.post(Runnable r)
(и тому подобное).
Обратите внимание, что вы всегда можете получить дескриптор вашего экземпляра Application
с помощью статического вызова Application.getApplication()
.
Так что в конце фонаПоток это безопасно сделать что-то вроде этого:
Application.getApplication().invokeLater(new Runnable() {
public void run() {
progressScreen.close();
Dialog.alert("I am finished!");
}
});
Это похоже на Android:
handler.post(new Runnable() {
public void run() {
progressScreen.dismiss();
showDialog(DIALOG_TASK_FINISHED_ID);
}
});