在Android中使用wait()函数时如何同步执行?

时间:2016-12-01 15:44:27

标签: java android

在Android App中执行以下代码时,setText发生在从另一个Service调用mainActivity.notify()之后。因此,似乎mainActivity.wait()在setText之前执行,导致setText等待。

这可能是什么原因以及如何在mainActivity.wait()之前执行Toast,以便在MainActivity等待时显示setText。

public static Activity mainActivity;
....
startButton.setText("Processing...");
synchronized(MainActivity.mainActivity) {
                try {
                    mainActivity.wait();
                } catch (InterruptedException e) {
                }
            }
startButton.setText("Start");

2 个答案:

答案 0 :(得分:3)

首先,永远不要对Activity进行静态引用。这几乎可以确保内存泄漏。如果您认为自己需要,那么整个应用程序的体系结构几乎肯定是错误的,或者您不了解如何使用上下文。

其次,在引擎盖下,Android与任何其他GUI OS一样,由事件循环驱动。通过保持主线程,可以防止事件循环执行从而冻结整个应用程序。特别是在不运行事件循环的情况下,应用程序永远不会重绘。

第三,你不能等到Toast出现。系统本身会显示Toasts,例如,当它决定时,屏幕上可能还有其他的Toast。没有机制可以通知何时显示吐司。敬酒的目的是火与忘,如果你需要更强大的东西,你需要自己写。

答案 1 :(得分:-4)

您可以使用Thread.sleep方法

try {
    Thread.sleep(1000);         
} catch (InterruptedException e) {
   e.printStackTrace();
}