AIR处理窗体关闭事件(在窗体关闭前提示用户做收尾工作)
我们知道用任何一个桌面应用程序在关闭前都会有收尾工作,比如:记录用户操作状态、是否保存已经编辑过的文件等。
??? ???如果是在C#或者Java中,这种操作很方便,因为需要用户操作时程序会停止等待用户操作,直到操作完成后才继续执行程序,但是AS3不是这样的,AS3的事件执行时不会因为等待用户操作而停止执行,AS3就像一从来都不知道等待的家伙(其实AS3没有等待也是正常现象,因为我们知道flashplayer是单线程的,如果要等待用户操作的话,那么整个程序就没法执行其它的任务了)。所以处理事件稍微有点麻烦。
下面我们用一个例子来说明如何在AIR程序关闭前弹出一个对话框来响应用户的操作。
??? ??? 打开FlexBuilder,新建一个Flex Project,如下图所示:
??? ??? 然后点击“确定”就创建了一个AIR工程,在生成的主文件里写入以下代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication addedToStage="init();" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
??? <mx:Script>
??? ??? <![CDATA[
??? ??? ??? import mx.events.CloseEvent;
??? ??? ??? import mx.controls.Alert;
??? ??? ??? private function init():void{
??? ??? ??? ??? stage.nativeWindow.addEventListener(Event.CLOSING,closing);
??? ??? ??? }
??? ??? ???
??? ??? ??? private function closing(event:Event):void{
??? ??? ??? ??? //取消事件的默认行为,在实际使用时可以指定条件来执行这句话
??? ??? ??? ??? event.preventDefault();
??? ??? ??? ???
??? ??? ??? ??? Alert.show("您确定要关闭窗口吗?","关闭窗口提示",Alert.YES|Alert.NO,this,closeHandler);
??? ??? ??? }
??? ??? ???
??? ??? ??? private function closeHandler(event:CloseEvent):void{
??? ??? ??? ??? event.detail==Alert.YES?stage.nativeWindow.close():null;
??? ??? ??? }
??? ??? ]]>
??? </mx:Script>
</mx:WindowedApplication>
??? ??? ??? 按F11来调试我们的程序,可以试试关闭窗体时的程序收尾工作是否有效。