Apache flex 初始化时Adobe air加载进度条
我试图让应用程序窗口(AdobeAIR)以加载进度条快速显示,直到windowedApplication的所有组件都加载完毕。我试图做的事情与默认情况下Adobe为Flex所做的非常相似,但奇怪的是,对于Air却没有 我试图逃避应用程序在执行后启动所需的“空白15秒等待时间”。基本上,如果没有预加载程序,用户会感到非常困惑,因为单击应用程序图标后没有视觉响应(windows等)可能会导致用户尝试打开它两次/三次以上。我只想让用户忙于预装/启动屏幕 Adobe的网站上发布了类似的信息: 我看了一下答案 但是,这导致了以下问题,我在过去15天内没有找到解决方案:- 示例项目 您可以通过指向我的dropbox帐户文件的链接下载示例项目:- 该项目可以在Flash builder中打开(我使用的是SDK 4.6,因此如果您在不同的SDK版本上编译/运行,您可能需要更改应用程序描述符),然后运行它以获得登录屏幕。。登录 用户/密码 然后注意UI/应用程序窗口如何变得无响应并在5-10秒内停止响应。。即使是窗口的Alt+Tab也无法工作 它基本上没有任何逻辑数据-我只是确保有很多UI组件,以增加UI创建时间Apache flex 初始化时Adobe air加载进度条,apache-flex,air,Apache Flex,Air,我试图让应用程序窗口(AdobeAIR)以加载进度条快速显示,直到windowedApplication的所有组件都加载完毕。我试图做的事情与默认情况下Adobe为Flex所做的非常相似,但奇怪的是,对于Air却没有 我试图逃避应用程序在执行后启动所需的“空白15秒等待时间”。基本上,如果没有预加载程序,用户会感到非常困惑,因为单击应用程序图标后没有视觉响应(windows等)可能会导致用户尝试打开它两次/三次以上。我只想让用户忙于预装/启动屏幕 Adobe的网站上发布了类似的信息: 我看了一下
我想做的是让应用程序窗口继续响应,并在模式对话框中显示一条进度/加载消息如果我正确理解了这个问题,听起来您需要的是构建一个。我们的想法是,在主应用程序中放入尽可能少的代码/资产,并将其作为其余代码的入口点。我提供的链接应该涵盖所有细节,但基本思路如下: MyApplication.mxml
MyModule.mxml
好啊我可以看出进度条显示的是加载状态。我们如何转换到下一个状态“就绪”并查看MyModule?ModuleLoader的update complete事件将立即触发,即使当组件包含在视图/状态中时,登录按钮尚未单击。我已添加到示例项目的链接,并更新了问题,以更清楚地解释问题。。请看你是否能想出一个解决办法。我故意将creationPolicy设置为all,因为我希望在启动时创建所有UI。如果我将其设置为auto/none,则每次我更改视图时(实例化新的viewnavigator节点时),应用程序都会表现为无响应@Rohan,您只是想通过MXML一次创建多个视图。这是一个常见的陷阱,也是为什么Flex因行动迟缓而名声不佳的原因。您需要更仔细地管理视图创建,以便在任何给定时间都不会创建超出需要的视图(这包括过度依赖嵌套的MXML标记)。如果在您的情况下根本没有办法解决这个问题,您可以使用类似伪线程的方法来防止贪婪的更新周期锁定线程:PS:另一个可能对您有效的策略是将子组件的创建推迟到下一个更新周期,在父容器上的creationComplete事件之后使用类似callLater的方法。基本上,分阶段创建子视图,这样就不会出现单个更新周期。
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
protected function login_clickHandler(event:MouseEvent):void
{
trace("login_clickHandler(event)");
this.moduleLoader.url = "MyModule.swf";
this.moduleLoader.loadModule();
this.currentState = "loading";
}
protected function moduleLoader_updateCompleteHandler(event:FlexEvent):void
{
trace("moduleLoader_updateCompleteHandler(event)");
this.moduleLoader.removeEventListener(FlexEvent.UPDATE_COMPLETE, moduleLoader_updateCompleteHandler);
this.currentState = "ready";
}
]]>
</fx:Script>
<s:states>
<s:State name="login" />
<s:State name="loading" />
<s:State name="ready" />
</s:states>
<s:ModuleLoader id="moduleLoader" top="0" left="0" bottom="0" right="0"
updateComplete="moduleLoader_updateCompleteHandler(event)" />
<s:Button label="Login" horizontalCenter="0" verticalCenter="0" includeIn="login" click="login_clickHandler(event)" />
<mx:ProgressBar id="progressBar" source="{this.moduleLoader}" horizontalCenter="0" verticalCenter="0"
includeIn="loading" />
</s:WindowedApplication>
<s:Module xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:s="library://ns.adobe.com/flex/spark" width="100%" height="100%"
creationComplete="module1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
/**
* Let's embed a video to simulate load time..
*/
[Embed(source = "VID_20130603_212046.mp4", mimeType = "audio/mpeg")]
private static const VIDEO_SOURCE:Class;
protected function module1_creationCompleteHandler(event:FlexEvent):void
{
trace("MyModule.module1_creationCompleteHandler(event)");
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Panel top="40" left="40" bottom="40" right="40">
<s:Label text="Hello World" horizontalCenter="0" verticalCenter="0" />
</s:Panel>
</s:Module>