线程操作经常用到wait和notify,用起来稍显繁琐,而Android给我们封装好了一个ConditionVariable类,用于线程同步。提供了三个方法block()、open()、close()。
void block()
阻塞当前线程,直到条件为open
void block(long timeout)
阻塞当前线程,直到条件为open或超时
void open()
释放所有阻塞的线程
void close()
将条件重置为close
实际项目中的使用:
mCondition 是一个ConditionVariable
refreshNotification()方法改变通知的图片和文本
/**
* 通知栏下载图标匿名线程控制
*/
private Runnable mTask = new Runnable() {
public void run() {
long blockTime = 150;
long beginend = 120;
while (!isComplete) {// 未下载完成则刷新通知
/* 下载图标的动态控制 */
refreshNotification(R.drawable.stat_sys_download_anim1);
if (mCondition.block(beginend) && !isComplete)
break;
refreshNotification(R.drawable.stat_sys_download_anim2);
if (mCondition.block(blockTime) && !isComplete)
break;
refreshNotification(R.drawable.stat_sys_download_anim3);
if (mCondition.block(blockTime) && !isComplete)
break;
refreshNotification(R.drawable.stat_sys_download_anim4);
if (mCondition.block(blockTime) && !isComplete)
break;
refreshNotification(R.drawable.stat_sys_download_anim5);
if (mCondition.block(blockTime) && !isComplete)
break;
refreshNotification(R.drawable.stat_sys_download_anim0);
if (mCondition.block(beginend) && !isComplete)
break;
}
}
};