1

怎么了fam。所以这不是关于内存管理方案的问题。对于那些可能不知道的人,Flash 虚拟机通过使用引用计数和标记和清除来依赖垃圾收集(有关这些主题的详细介绍,请查看 Grant Skinner 的文章演示文稿)。是的,Flash 还提供了“delete”操作符,它可以(不幸的是)用于删除动态对象的属性。

我想知道的是如何做到这一点,以便 Flash 程序在后台运行时不会继续消耗 CPU 和内存(例如,保存加载内容或远程通信)。这个问题的动机部分来自 Apple 禁止交叉编译的应用程序(在其 SDK 4 中),理由是它们的行为不像 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 是否有可能检测到它的一些正在运行的程序处于空闲状态,并类似地搁置它们,直到用户执行操作以恢复它们?

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

4

2 回答 2

1

好吧,我不会很快就在 iphone os 上屏住呼吸。

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

于 2010-04-21T17:43:17.053 回答
1

基本上,您可以使用Event.ACTIVATEandEvent.DEACTIVATE来找出您的应用程序何时失去焦点。

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

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

于 2010-04-21T10:16:41.390 回答