У меня есть приложение Android с основной вкладкой и несколько действий в отдельных вкладках. В моей основной деятельности onCreate() у меня есть runnable, который создает список, и в отдельных действиях я использую этот список.
В отдельных действиях onCreate() у меня также есть Runnables, которые работают в списке. Тем не менее, мне нужно, чтобы эти Runnables запускались только тогда, когда основная вкладка Runnable завершает создание списка, иначе я бы получил нулевой список. Я пытаюсь найти элегантный способ сделать это. Прямо сейчас, в моей основной деятельности Runnable, я устанавливаю глобальную логическую переменную isDone, и в моей индивидуальной активности Runnable я жду, когда isDone будет установлен через цикл while. Это работает, но, вероятно, это не лучший способ сделать это.
Любые мысли?
Спасибо.
Изменить: Я пытаюсь выполнить следующий код, но я получаю ошибки во время выполнения:
В моем MainActivity Runnable:
mainRunnable = new Runnable() {
public void run() {
try {
generateList();
synchronized(this) {
listDone = true;
notifyAll();
}
} catch (Exception e) {
Log.e("BACKGROUND_PROC", e.getMessage());
}
}
};
Thread thread = new Thread(null, mainRunnable, "Background");
thread.start();
В моей RunAnable OtherActivity:
otherRunnable = new Runnable() {
public void run() {
synchronized(MainActivity.mainRunnable) {
if (!MainActivity.getListDone()) {
try {
wait();
} catch (InterruptedException e) {
}
}
}
}
};
Thread thread = new Thread(null, otherRunnable, "Background");
thread.start();
Функция mainRunnable работает полностью, но otherRunnable, похоже, приводит к сбою приложения. Появляется следующее сообщение об ошибке:
01-10 15:41:25.543: E/WindowManager(7074): Activity com.myapp.MainActivity has leaked window [email protected] that was originally added here
01-10 15:41:25.543: E/WindowManager(7074): android.view.WindowLeaked: Activity com.myapp.MainActivity has leaked window [email protected] that was originally added here