Android应用程序中等待前未被线程锁定的对象
在我的Android应用程序中,我尝试每5秒执行一次任务 我试过这样做:Android应用程序中等待前未被线程锁定的对象,android,Android,在我的Android应用程序中,我尝试每5秒执行一次任务 我试过这样做: @Override public void onCreate() { //standard initialization code letsChange(); //method name try{ wait(1000); } catch(Exception e) { e.printstackstrace(); } } 但我收到以
@Override
public void onCreate() {
//standard initialization code
letsChange(); //method name
try{
wait(1000);
} catch(Exception e) {
e.printstackstrace();
}
}
但我收到以下错误消息:
java.lang.IllegalMonitorStateException:对象在等待()之前未被线程锁定
如何停止此操作?在类内调用wait()
时,实际上是在该类的当前实例上调用wait()
。为此,它需要对该实例进行锁定。如果另一个线程有锁,您将无法等待
将synchronized
添加到onCreate()
将获得锁(当前的活动实例
)并允许您在内部调用wait()
,但这绝对不是您想要做的,因为它会阻塞主/UI线程并导致应用程序无响应
您可能想要的是活动中的以下内容:
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()
中的代码在所需延迟(1000ms)后运行,然后每1000ms运行一次,直到满足终止条件。如果可能,请上载整个代码,但此操作将在特定时间后仅运行此代码一次。我希望它每5秒运行一次我的代码,直到我说停止。那么我可以使用for循环来实现这个功能吗?那么,您可以向Runnable
to循环添加逻辑。类似于if(!conditionMet())handler.postDelayed(..)
。当然,您必须使处理程序成为final,才能从可运行