为了同步/队列对共享资源的访问,我将在等待循环的帮助下使用Semaphore。
为了避免遇到CPU挂钩,我想sleep()
在while
循环内部进行{{1}}。
我搜索了http://developer.android.com引用,发现了两个这样的sleep()函数,我很困惑哪一个符合哪种情况:
哪一个更适合我描述的情况以及为什么?
答案 0 :(得分:18)
首先,你真的需要一个等待循环吗?您通常可以使用适当的通知来解决您的问题,即拥有一个Object,在其上调用wait()和notify()或其他方式(例如阻塞队列或Semaphore.acquire())。
那就是说,如果你真的想要一个轮询循环(除非你必须这样做,你真的不应该这样做),我会坚持使用Thread.sleep()。正如文档所说,没有太大的区别,除了你可以选择中断Thread.sleep()。不要让自己选择这样做。
请注意,在Thread.sleep()的情况下,你将不得不捕获该异常 - 如果你非常懒,你可能会坚持使用SystemClock.sleep()。
答案 1 :(得分:0)
事实是:
使用asyncTask.cancel(true)可以在AsyncTask之类的调用中中断Thread.sleep(n)
SystemClock.sleep(n)似乎忽略了任何被中断的命令,因此当您使用类似这样的内容时可能存在内存泄漏的风险:https://github.com/square/leakcanary/blob/master/leakcanary-sample/src/main/java/com/example/leakcanary/MainActivity.java