Archive for 十二月, 2010

Flex里的空闲检测-IDLE

分类于 生活随笔 十二月 29th, 2010 by marco – 1 Comment

Flex里面也有空闲检测,本来为了实现这个功能还要去全局侦听鼠标和键盘事件,有了IDLE这下可方便多了。
IDLE由SystemManager进行管理,所以要检测IDLE就要对SystemManager进行侦听,方法如下:

/**
 * 主程序初始化时对systemManager进行侦听
 */
public function init():void
{
	systemManager.addEventListener(FlexEvent.IDLE, idleHandler);
}
 
/**
 * idle事件处理
 */
private function idleHandler(event:FlexEvent):void
{
	var idleCounter:int = systemManager.mx_internal::idleCounter;
	if( idleCounter >= 900)// 100毫秒一次,900就等于90秒
		systmeIdle();
}
 
/**
 * 发送系统空闲消息
 */
private function systmeIdle():void
{
	// TO DO ...
}

这里要注意的是FlexEvent.IDLE事件派发规则是:当 1 秒内没有任何键盘和鼠标活动时,每隔 100 毫秒分派一次
根据API所知,我们不能去设定系统空闲多少秒以后才派发IDLE事件,这里我们只能在idleHandler事件处理方法里面根据systemManager对IDLE事件派发的次数来计算系统已经空闲了多长时间,悲剧的这个事件的派发次数还被隐藏起来了,在mx_internal命名空间下,如果要得到这个值我们不得不使用mx_internal这个命名空间,莫名其妙的多走了一步,方法如下:

// 先把名导入
import mx.core.mx_internal;
 
// 对象.命名空间::属性名
systemManager.mx_internal::idleCounter;