什么是fam。所以这不是一个询问内存管理方案的问题;对于那些可能不知道的人,Flash虚拟机通过使用引用计数和标记和扫描来依赖垃圾收集(为了更好地覆盖这些主题,请查看Grant Skinner的article和presentation)。是的,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是否可以检测到某些正在运行的程序是空闲的,并且类似地搁置它们直到用户执行恢复它们的操作?
(请随意回答我提出的许多问题。)
答案 0 :(得分:1)
基本上,您可以使用Event.ACTIVATE
和Event.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/