Я пытаюсь вскрыть диалог из метода run, он дает мне исключение, которое Looper.prepare не вызывается, когда я вызываю тот же метод, я не получаю никакого исключения, но на консоли не отображается всплывающее диалоговое окно. Поскольку я использовал обработчик таким образом,
handler = new Handler() {
public void handleMessage(Message msg) {
showDialog(DIALOG1_KEY);
// process incoming messages here
}
};
Я снова не получаю никакого исключения, но мне все равно не повезло, что какой-либо орган скажет мне, где я делаю что-то неправильно.
Трудно сказать из фрагмента кода, который вы предоставили, но я думаю, что вы неправильно используете обработчик.
Что вам нужно сделать, это инициализировать новый объект Handler
на них основной поток, например, определив его как полевую переменную.
private Handler handler = new Handler();
Затем создайте новый Runnable
, который включает инструкции, которые вы хотите выполнить в потоке GUI (но который будет вызываться из вашего метода фона run
).
private Runnable runOnGUI = new Runnable() {
private void run() {
showDialog(DIALOG1_KEY);
}
};
Затем в вашем методе запуска вам нужно использовать объект обработчика для публикации вашего метода runOnGUI
в потоке графического интерфейса пользователя.
private Runnable runInBackground = new Runnable() {
private void run() {
handler.post(runOnGUI);
// Do processing
}
};