2010-04-21 106 views
1

什么家庭。所以这不是问关于内存管理方案的问题;对于那些你可能不知道的人来说,Flash虚拟机通过引用计数和标记和扫描依赖于垃圾收集(为了更好地理解这些主题,请查看Grant Skinner的articlepresentation)。是的,Flash还提供了“删除”操作符,可以(不幸的是)只用于删除动态对象的属性。如何让Flash与其他人一起玩?

我想知道的是如何使Flash程序在后台运行时不会继续占用CPU和内存(例如,保存加载内容或远程通信)。这个问题的动机部分来自苹果禁止交叉编译的应用程序(在其SDK 4中),理由是它们不具备iPhone OS 4的核心功能behave as predicted with the multitasking。我的目的不仅仅是让Flash程序能够通过测试'就iPhone OS 4中的多任务而言,还可以简单地制作更好(行为上)的Flash程序。换句话说,Flash应用程序如何模仿iPhone OS 4的多任务功能? Flash API是否为开发人员提供了在其他程序运行时将其应用程序“休眠”的方法,然后以同样的速度“唤醒”它们?

在我们自己的程序中,我们可能会做一些粗的检测,当用户处于空闲状态(比方说)四个秒(无鼠标移动或按键):

var idle_id:uint = setInterval(4000, pause_program); 
var current_movie_clip:MovieClip; 
var current_frame:uint; 

... 

// on Mouse move or key press... 
clearInterval(idle_id); 
idle_id = setInterval(4000, pause_program); 

... 

function pause_program():void 
{ 
current_movie_clip = event.target as MovieClip; 
current_frame = current_movie_clip.currentFrame; 
MovieClip(root).gotoAndStop("program_pause_screen"); 
} 

(上节目暂停屏幕)

resume_button.addEventListener(MouseEvent.CLICK, resume_program); 

function resume_program(event:MouseEvent) 
{ 
current_movie_clip.gotoAndPlay(current_frame); 
} 

如果这是正确的想法,什么是检测一个应用程序应该被搁置的最佳方式?

而且,更重要的是,Flash Player是否有可能检测到其某些正在运行的程序处于空闲状态,并且类似地搁置它们,直到用户执行恢复它们的操作为止?

(请随时回答尽可能多或尽可能少的我已经提出了许多问题。)

回答

1

基本上,你可以使用Event.ACTIVATEEvent.DEACTIVATE找出当你的应用程序失去焦点。除此之外,我建议您不要将Flash IDE用于除纯动画之外的其他任何内容,并使用以编程为中心的动作IDE。 Flash IDE不是为提高效率而设计的,但易于使用。为了进行适当的优化,您需要以编程方式执行操作,以便完全控制您的应用。

至于iPhone:这是你应该关注的问题。如果adobe想出了一种在iPhone上使用Flash的方法,那么我认为他们的抽象层将会适应iPhone OS的工作。原生Flash Player实现的内部工作方式绝对不会暴露给您,因为它需要大量的API更新,甚至可能需要新的操作码,并且非常直接访问您不应该在沙盒环境中访问的图层,因为Flash播放器是。

相关问题