怎么了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 是否有可能检测到它的一些正在运行的程序处于空闲状态,并类似地搁置它们,直到用户执行操作以恢复它们?
(请随意回答我提出的许多问题。)