在发布一个简单的“Clock”应用程序时,我发现Android要求您使用位于线程A中的android.os.Handler,以便使用来自线程B的数据结果更新线程A中的View对象。android.os.Handler类是否消除了将某些方法声明为synchronized的需要?
我还是比较新的Java,这是我第一次明确地处理过线程,但我知道,如果两个不同线程想要访问,通常你会声明方法和/或操作同步相同的数据。不过,似乎android.os.Handler是一种特定于Android的线程间数据同步方式,因此您可以避免在我刚刚链接的Oracle文档中详细说明的classicconcurrency errors。这是真的吗?
如果我发现自己在一个情况就是我是需要由Android操作系统使用android.os.Handler从一个线程运送到另一个数据,这是否意味着我没有要申报用于将数据导出为同步的方法?
这就是我喜欢能够将多个答案标记为正确答案的时代。这也是一个很好的解释。 – scriptocalypse 2011-03-04 20:26:29
此外,这解释了为什么我不需要一个Looper为我的特定示例(处理程序属于活动的“主”线程,它已经有一个活套)。时钟的运行线程使用主要活动的handler.post(runnable);方法。再次感谢您的解释。 – scriptocalypse 2011-03-04 20:49:00
顺便说一句,我检查和'MessageQueue'确实同步。 – bigstones 2012-09-04 13:06:01