我有一个Android应用程序,其中包含一个主选项卡活动和几个单独选项卡内的活动。在我的主活动的onCreate()中,我有一个可运行对象,它创建一个列表,在单独的活动中,我利用这个列表。
在单独的活动的onCreate()中,我还有运行在列表上操作的可运行对象。但是,我需要这些可运行对象仅在主选项卡活动的可运行对象完成创建列表时才运行,否则我将得到一个空列表。我正在尝试找到一种优雅的方法来实现这一点。现在,在我的主活动的Runnable中,我设置了一个全局布尔变量isDone,在单独的活动的可运行对象中,我通过while循环等待isDone被设置。这可以工作,但可能不是最好的方法。
有任何想法吗?
谢谢。
编辑:我正在尝试以下代码,但我收到运行时错误:
在MainActivity的Runnable中:
在单独的活动的onCreate()中,我还有运行在列表上操作的可运行对象。但是,我需要这些可运行对象仅在主选项卡活动的可运行对象完成创建列表时才运行,否则我将得到一个空列表。我正在尝试找到一种优雅的方法来实现这一点。现在,在我的主活动的Runnable中,我设置了一个全局布尔变量isDone,在单独的活动的可运行对象中,我通过while循环等待isDone被设置。这可以工作,但可能不是最好的方法。
有任何想法吗?
谢谢。
编辑:我正在尝试以下代码,但我收到运行时错误:
在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();
在我的OtherActivity的Runnable中:
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();
主线程似乎运行完全,但另一个线程似乎导致应用程序崩溃。我收到以下错误消息:
01-10 15:41:25.543: E/WindowManager(7074): Activity com.myapp.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40539850 that was originally added here
01-10 15:41:25.543: E/WindowManager(7074): android.view.WindowLeaked: Activity com.myapp.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40539850 that was originally added here
wait()
。请查看我答案的更新。 - Taymon