2012年2月18日土曜日

ViewNavigatorの画面開始・終了時の処理をどのタイミングでするべきか?

モバイルFlash(MF)の開発で使われるSparkのViewNavigatorでの画面開始・終了時の処理をどのイベントのタイミングでするべきだろうか?

特に画面開始時の処理のタイミングが問題だ。このタイミングが適切でないと画面の遷移がスムーズに行われず、ユーザーとしては「一瞬画面が止まる」「遅い」「重い」という風に感じてしまうから。

通常のFlex開発だと画面開始時の処理は主にCREATION_COMPLETEイベントのタイミングで行なってきたので、ViewNavigatorでも同様にしてみたけれど、どうも画面遷移が重い気がする。

そこで、Viewのライフサイクルを詳しく調べることにした。このあたりはドキュメントにまとめられていた。

Adobe Flex 4.6 * モバイルアプリケーションでのビューの定義

ドキュメントのフロー図を見ると、どうやらCREATION_COMPLETEではなく、VIEW_ACTIVATEの時点で行うのが良さそうだ。

なぜなら、CREATION_COMPLETEからVIEW_ACTIVATEまでの間には

・ActionBarの更新
・トランジション
・元のVIEWを削除

など、様々な処理が行われることになっているから。

これだけ様々な処理が入っている時に、サーバーへのリクエストだのデータのパースだのをしていたら、それは画面遷移が重くなるわけだ。

どれだけ速くなるかはCREATION_COMPLETEイベント時の処理の重さにもよるのだろうけど、実際にやってみたら結構速くなった気がする。

画面終了時の処理はVIEW_DEACTIVATEで行うのが良さそうだ。