我無法找到任何工作解決方案來在鎖定/解鎖設備時停止/恢復線程,任何人都可以提供幫助,或者告訴我在哪裏可以找到如何操作的方法?我需要在手機鎖定時停止線程,並在手機解鎖時再次啓動。開始/停止線程
開始/停止線程
回答
Java在協作中斷模型上運行以停止線程。這意味着你不能簡單地在線程本身沒有合作的情況下停止線程執行。如果你想停止一個線程客戶端可以調用了Thread.interrupt()方法來請求的線程停止:
public class SomeBackgroundProcess implements Runnable {
Thread backgroundThread;
public void start() {
if(backgroundThread == null) {
backgroundThread = new Thread(this);
backgroundThread.start();
}
}
public void stop() {
if(backgroundThread != null) {
backgroundThread.interrupt();
}
}
public void run() {
try {
Log.i("Thread starting.");
while(!backgroundThread.interrupted()) {
doSomething();
}
Log.i("Thread stopping.");
} catch(InterruptedException ex) {
// important you respond to the InterruptedException and stop processing
// when its thrown! Notice this is outside the while loop.
Log.i("Thread shutting down as it was requested to stop.");
} finally {
backgroundThread = null;
}
}
螺紋的重要組成部分,是你不要嚥下InterruptedException的,而是阻止你的線程的循環,因爲只有當客戶端自己請求線程中斷時纔會發生此異常。
因此,您只需要將SomeBackgroundProcess.start()連接到解鎖事件,並將SomeBackgroundProcess.stop()連接到鎖定事件。
這很好,但工作只有沒有if(backgroundThread == null),但線程粉碎,如果去電話菜單(隱藏應用程序,然後再次打開) – 2012-08-09 13:10:19
我不明白你想說的除了你必須刪除if(backgroundThread == null)。這可能是一個競爭條件,線程在你打開電話菜單之前沒有關閉,所以線程正在死亡,但它還沒有達到最終的聲明。在開始/停止中添加日誌語句,然後檢查日誌以查看是否是這種情況。 – chubbsondubs 2012-08-09 14:31:49
- 1. NSTask開始/停止
- 2. (Python)用原始輸入停止線程?
- 3. 停止線程
- 4. 停止線程
- 5. 停止線程
- 6. 試圖停止線程,但它再次開始
- 7. 開始/停止DispatcherTimer從不同的線程
- 8. 使用線程(開始和停止它們)
- 9. while循環開始後程序停止
- 10. 停止nodejs進程由npm開始?
- 11. 開始停止守護程序
- 12. 騾 - 開始停止默認流程
- 13. 遠程檢查/開始/停止服務
- 14. 在開始時停止子進程
- 15. 爲什麼線程在另一個線程開始執行時會停止?
- 16. 停止觀看android - 暫停,然後開始並從停止的地方開始
- 17. 開始停止jquery插件
- 18. 停止,開始超級fancybox
- 19. onListItemClick()開始/停止歌曲
- 20. Android開始/停止服務
- 21. 停止從'開始'的D3'
- 22. 背景GIF開始/停止?
- 23. JQuery停止/開始傳播
- 24. 開始FormFlow它被停止
- 25. 暫停和停止線程
- 26. HowTo-線程停止
- 27. 停止MFC線程
- 28. Android:停止線程
- 29. 停止線程onPause
- 30. JavaFX停止線程
你已經有了監聽鎖定/解鎖事件的代碼嗎? – 2012-08-08 13:24:34
是的,但我不知道它是正確的,你可以給一個鏈接,或源的例子如何正確地做到這一點? – 2012-08-08 14:00:03