アクセシビリティ
デベロッパーリソース

目次

ActionScript Thread Library 1.0 (そうめん) で非同期処理をスマートに

もう少し複雑な読み込みの例

実際の開発では、読み込みの処理は更に複雑になることがあります。例えば、まず XML を読んで、その内容を元に、画像ファイルを読み込んで表示する、といった処理です。

これを ActionScript Thread Library を使って書いてみると次のようになります。

import org.libspark.thread.Thread;
import org.libspark.thread.threads.net.URLLoaderThread;
import org.libspark.thread.threads.display.LoaderThread;
import org.libspark.thread.utils.SerialExecutor;

public class LoadXMLandImageThread extends Thread
{
	private var _loader:URLLoaderThread;
	private var _loaders:SerialExecutor;
	
	override protected function run():void
	{
		// XML を読み込む
		_loader = new URLLoaderThread('images.xml');
		_loader.start();
		_loader.join();
		next(loadXMLComplete);
	}
	
	private function loadXMLComplete():void
	{
		// 読み込んだ XML から更に画像を読み込むスレッドを作成して実行する
		
		_loaders = new SerialExecutor();
		
		var xml:XML = XML(_loader.loader.data);
		for each (var item:XML in xml.item) {
			_loaders.addThread(new LoaderThread(new URLRequest(String(item))));
		}
		
		_loaders.start();
		_loaders.join();
		next(loadImagesComplete);
	}
	
	private funciton loadImagesComplete():void
	{
		// 表示処理など...
	}
}

ここで、次のクラスが新しく登場しています。

  • LoaderThread
    Loader を用いて画像などを読み込むスレッドです。コンストラクタで指定された URLRequest を用いて画像などを読み込み、完了するとスレッドが終了します。

はじめに、URLLoaderThread を用いて「image.xml」を読み込んでいます。読み込みが完了すると、next メソッドによって指定された loadXMLComplete メソッドが呼び出されます。

loadXMLComplete メソッドでは、読み込んだ XML の item 要素を取得し、そこに書かれているファイル名の画像を読み込む LoaderThread を作成して、SerialExecutor に追加しています。

たとえば、images.xml が次のような内容であった場合、

<items>
              <item>a.jpg</item>
              <item>b.jpg</item>
              <item>c.jpg</item>
</items>

「a.jpg」「b.jpg」「c.jpg」がそれぞれ LoaderThread によって読み込まれます。読み込みが完了すると、next メソッドによって指定された loadImagesComplete メソッドが呼び出されます。

このように、ActionScript Thread Library では、Thread の start メソッド、join メソッド、next メソッドなどを組み合わせて、処理を柔軟に記述することが出来ます。