gpt4 book ai didi

java - Android/Java线程 hibernate

转载 作者:行者123 更新时间:2023-11-29 06:00:25 26 4
gpt4 key购买 nike

除了隐式用户界面线程,我还创建了两个线程(可运行线程),它们内部都有一个 while 循环,我在其中定期检查我已实现的消息队列中的更新。

一开始的问题是这两个while循环是无限的,而且变化的太快太频繁以至于几乎用光了设备的所有CPU。所以我考虑让 while 循环在每个循环后 hibernate 大约 100 毫秒,让其他线程完成它们的工作,但我遇到了另一个问题:

现在,问题是线程会 hibernate 100 毫秒,但它们不会让 UI 线程在这段时间内工作 :( 这样做会使 UI 变得迟钝。当我在屏幕上拖动某些东西时,它会滞后有一点。

所以我想做的是让这些线程(这些 while 循环)每 100 毫秒检查一次消息队列标志,但在这 100 毫秒期间我想让 UI 线程运行。如何实现?

编辑 1

我找到了 yield 方法,它会停止当前线程的运行,但是我什么时候调用它呢?我需要调用 sleep 线程,同时让它以某种方式产生... ??

编辑 2

这两个类是单例的,我从应用程序的第一个 Activity 启动它们,所以当应用程序启动时(UI 线程)

//Obtain object of singleton classes
ControllerSingleton controller = ControllerSingleton.getControllerSingleton();
OpponentSingleton opponent = OpponentSingleton.getOpponentSingleton();

//Start threads
/*--------CONTROLLER----------*/
Thread t;
t = new Thread( controller );
t.setName("ControllerThread");
Log.i("Remy","Starting Controller thread...");
t.start();

/*--------OPPONENTS----------*/
t = new Thread( opponent );
t.setName("OpponentThread");
Log.i("Remy","Starting Opponent thread...");
t.start();

在每个 run() 中我都有下一个代码:

public void run() 
{
while( true )
{
//Check if any messages in the queue
if ( queueEmpty() == false )
{
//Do something ...
}
/*HERE IS WHERE I WOULD LIKE TO TELL THE THREAD TO STOP AND WAIT FOR 100 ms*/
}
}

最佳答案

我认为您需要使用的是 Handler .你可能想看看 this tutorial例如。

关于java - Android/Java线程 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10349117/

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