【问题标题】:asynchronous thumbnail generation异步缩略图生成
【发布时间】:2013-02-16 06:56:27
【问题描述】:

我创建了一个生成缩略图的例程,基本流程如下:

1) get all jpg url from directory
2) iterate all the url
   2.1) load url into a bitmap using URLRequest
   2.2) resize the bitmap to small size
   2.3) encode the bitmap into jpg
   2.4) write the jpg into a file
3) update list dataprovider with thumb url and refresh

这适用于 1 个文件,但在 2 个或更多文件上失败,这是因为步骤 2.1 到 2.4 包含在具有异步方法的静态函数中。 2.1 是异步的,resize 是异步的,encode 是异步的,每个都是通过匿名函数嵌套等待完成事件。

下一次迭代到步骤 2.1 时,它将传递新的 url,并且上一次迭代的回调方法将使用它。

有什么更好的方法来解决这个问题?我是否只是创建一个类来执行第 2 步并每次都实例化它而不是静态函数?我觉得它有点重。

【问题讨论】:

    标签: apache-flex actionscript air flex4


    【解决方案1】:

    正如你所说,你的函数需要保存它们的状态,它们需要所有操作序列的公共数据。这正是发明类的原因。

    您不会为使用这种“繁重”的方法感到抱歉,因为 adobe 将它与 AsyncToken 等一起使用。如果这段代码不是你程序性能的瓶颈,你一定要使用类:它会让你的代码更清晰。

    但是,如果您觉得这里的性能很重要,您可以让您的迭代开始异步:如果已达到最大已启动操作,则在其中一个完成之前不要开始新操作。在这种情况下,您可以创建此类类的池并重用它们。

    但是,我想在您的情况下,位图操作的持续时间与简单类的实例化相比会很大,您可以忽略实例化开销)。

    您也可以按照现在的方式行事,只是在前一个操作完成 100% 之前不要开始新的操作。这是先前变体的一个特例,在这种情况下,您的主类用作建议的新类,它会重用自身,并且最大操作限制为 1。

    【讨论】:

    • 谢谢。我通过链接 event.COMPLETE 事件并重组我的代码来解决它。我不想创建像序列/可排序类这样的框架,也不想实例化重对象,所以我做了我能想到的最简单的实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2020-01-30
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多