android postInvalidateDelayed 方法
多初入?Android?或?Java?开发的新手对?Thread?、?Looper?、?Handler?和?Message?仍然比较迷惑,衍生的有HandlerThread?、?java.util.concurrent?、?Task?、?AsyncTask?由于目前市面上的书籍等资料都没有谈到这些问题,今天?Android123?就这一问题做更系统性的总结。
final boolean
sendEmptyMessage?(int what)
final boolean
sendEmptyMessageAtTime?(int what, long uptimeMillis)
final boolean
sendEmptyMessageDelayed?(int what, long delayMillis)
final boolean
sendMessage?(?Message??msg)
final boolean
sendMessageAtFrontOfQueue?(?Message??msg)
boolean
sendMessageAtTime?(?Message??msg, long uptimeMillis)
final boolean
sendMessageDelayed?(?Message??msg, long delayMillis)
MessageQueue
是一种?数据?结构,见名知义,就是一个消息队列,存放消息的地方。每一个线程最多只可以拥有一个MessageQueue?数据结构。??
????创建一个线程的时候,并不会自动?创建其?MessageQueue?。通常使用一个?Looper?对象对该线程的MessageQueue?进行管理。主线程创建时,会创建一个默认的?Looper?对象,而?Looper?对象的创建,将自动创建一个?Message Queue?。其他非主线程,不会自动创建?Looper?,要需要的时候,通过调用?prepare?函数来实现。??
?????java.util.concurrent?对象分析
对于过去从事?Java?开发的程序员不会对?Concurrent?对象感到陌生吧,他是?JDK 1.5?以后新增的重要特性作为掌上设备,我们不提倡使用该类,考虑到?Android?为我们已经设计好的?Task?机制,我们这里?Android?开发网对其不做过多的赘述。
Task?以及?AsyncTask
在?Android?中还提供了一种有别于线程的处理方式,就是?Task?以及?AsyncTask?,从开源代码中可以看到是针对?Concurrent?的封装,开发人员可以方便的处理这些异步任务。???当然涉及到同步机制的方法和技巧还有很多,考虑时间和篇幅问题不再做过多的描述。