gpt4 book ai didi

android - 在 Android 应用程序等待之前对象未被线程锁定

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:00 24 4
gpt4 key购买 nike

在我的 Android 应用程序中,我尝试每 5 秒执行一次任务。

我试过这样做:

@Override
public void onCreate() {
//standard initialization code

letsChange(); //method name

try{
wait(1000);
} catch(Exception e) {
e.printstackstrace();
}
}

但是我收到以下错误信息:

java.lang.IllegalMonitorStateException: object not locked by thread before wait()

我该怎么做才能阻止这种情况?

最佳答案

当您在类中调用 wait() 时,您实际上是在该类的当前实例上调用 wait()。为此,它需要锁定该实例。如果另一个线程有锁,你将无法等待。

onCreate()中加入synchronized会获取锁(Activity的当前实例)让你调用wait () 内,但这绝对您不想这样做,因为它会阻塞主/UI 线程并导致您的应用程序无响应。

您可能想要的是 Activity 中的以下内容:

private boolean isTerminationConditionMet = false;

@Override
public void onCreate() {
//standard Android onCreate code

final Handler handler = new Handler();
final Runnable task = new Runnable() {
@Override
public void run() {
//code you want to run every second
if (!isTerminationConditionMet()) {
handler.postDelayed(task, 1000);
}
}
}
handler.postDelayed(task, 1000);
}

这将导致 run() 中的代码在所需延迟(1000 毫秒)后运行,然后每 1000 毫秒运行一次,直到满足终止条件。

关于android - 在 Android 应用程序等待之前对象未被线程锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40416035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com