如何让Flash“与他人合作”?

时间:2010-04-21 08:37:16

标签: flash memory-management cross-compiling multitasking ios4

什么是fam。所以这不是一个询问内存管理方案的问题;对于那些可能不知道的人,Flash虚拟机通过使用引用计数和标记和扫描来依赖垃圾收集(为了更好地覆盖这些主题,请查看Grant Skinner的articlepresentation)。是的,Flash还提供了“删除”操作符,可以(不幸的是)仅用于删除动态对象的属性。

我想知道的是如何使Flash程序在后台运行时不会继续消耗CPU和内存(例如,保存加载内容或远程通信)。这个问题的动机部分来自Apple禁止交叉编译的应用程序(在其SDK 4中),因为他们没有behave as predicted with the multitasking以iPhone OS 4为中心。我的目的不仅仅是制作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是否可以检测到某些正在运行的程序是空闲的,并且类似地搁置它们直到用户执行恢复它们的操作?

(请随意回答我提出的许多问题。)

2 个答案:

答案 0 :(得分:1)

基本上,您可以使用Event.ACTIVATEEvent.DEACTIVATE找出您的应用失去焦点的时间。

除此之外,我建议您不要将Flash IDE用于除纯动画之外的任何内容,并使用以编程为中心的actionscript IDE。 Flash IDE不是为提高效率而设计的,而是为了便于使用。为了进行适当的优化,您需要以编程方式执行操作,以便完全控制您的应用。

对于iPhone来说:这不是你应该关注的事情。如果adobe想出了一种在iPhone上获取闪存的方法,我想他们的抽象层将适应iPhone OS的尽可能好的工作。原生Flash播放器实现的内部工作方式绝对不会暴露给您,因为它需要大量的API更新,甚至可能需要新的操作码和非常直接的层访问,不应该允许您在沙盒环境中访问flash播放器是。

答案 1 :(得分:1)

嗯,我不会很快屏住iphone操作系统上的闪光灯。

http://www.engadget.com/2010/04/21/adobe-halts-investment-in-iphone-specific-flash-dev-tools-has-a/