大家好,這樣的代碼可能會導致程序滯後嗎?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