1

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

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 步并每次都实例化它而不是静态函数?我觉得它有点重。

4

1 回答 1

0

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

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

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

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

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

于 2013-02-17T07:58:25.783 回答