doActivity

ここ数日、製作したモデルに対する並列実行エンジンの効果的なデモを作成するために、doActivityの実装を行っているのだが、これがなかなかに難しい。
まず、doActivityを実現するために考えなければならないこととしては次のことがある。

  1. transition後に、targetにあたるstateのdoActivityにあたるActivityを非同期で実行する。
  2. doActivityにあたるActivityが終了したら、completion eventを発生させて、それを他のイベントよりも先に処理させる(EventQueueの先頭に置く)。
  3. doActivityにあたるActivityの終了よりも先に、現在のstateからのtransitionが起きた場合、そのActivityを終了させる。
  4. 上のことをさらにComposite stateの場合にあてはめて考える。
とりあえず、1は簡単に実現できるが、問題は2から4で、これらはε遷移と合わせて考えないといけないので、結構複雑な問題のようだ。つーか、今のStateMachineの実装では実現するのが難しいな…。こうなったら、StateMachineの実行を一から考え直すか?