大家好,这样的代码可能会导致程序滞后吗?Java代码速度提升
while(true)
if(!connected) break;
正如我们所见,它一直在检查状况。如果我在每次迭代中设置小睡,会更快吗?
该代码在上运行Android GingerBread。
编辑:
它等待其他线程完成,并连接设置为false变量。变量连接像锁一样使用。线程通常会发现它是真实的并且等待是错误的。然后设置为true并且只在最后改变它。
大家好,这样的代码可能会导致程序滞后吗?Java代码速度提升
while(true)
if(!connected) break;
正如我们所见,它一直在检查状况。如果我在每次迭代中设置小睡,会更快吗?
该代码在上运行Android GingerBread。
编辑:
它等待其他线程完成,并连接设置为false变量。变量连接像锁一样使用。线程通常会发现它是真实的并且等待是错误的。然后设置为true并且只在最后改变它。
,我认为这将是更好地添加少量睡在你的循环,以免费的处理器资源用于其他进程,特别是在一个核处理器。
请不要在Android上这样做,你不仅会破坏你的应用程序的用户体验,而且如果你的应用程序正在运行,它也会导致整体操作系统经验不足。以正确的方式做,或找到一个正确的方式。 – 2013-02-28 13:40:01
我相信这可能是这样的:
while(connected) {
// do stuff...
尝试这样:
private Integer connected;
private ConnectedListener connectedListener;
public interface ConnectedListener {
public void onDisconnected();
}
private void startThreads() {
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
@Override
public void run() {
synchronized (connected) {
connected++;
}
// do some random long work
synchronized (connected) {
connected--;
if (connected == 0 && connectedListener != null) {
//let the listener know that we are completely disconnected
connectedListener.onDisconnected();
}
}
}
}).start();
}
}
这种方法比较复杂,虽然在某些应用中可能很有用。 – Balvonas 2013-02-28 13:30:40
什么是你的一个连接检查? Android中的很多连接都有与之关联的广播,这将消除完全需要这样一个循环 – 2013-02-28 12:47:50
如果您没有连接,这是将手机转换为便携式加热器的好方法。 – 2013-02-28 12:48:57
@AlexanderPogrebnyak我认为你错了。你能解释你的评论吗?如果'connected'是'false',他会立即从'while'循环中断开。 – jlordo 2013-02-28 12:56:52