1

私の Android アプリは、ステート マシンのように一連のイベントを実行する必要があります。

イベント 1: ビデオ # 1 を再生

イベント 2: 画像を読み込み、ボタンが押されるのを待つ

イベント 3: ビデオ #2 を再生する

等...

1 つの方法は、イベントごとに個別のアクティビティを生成することですが、イベントが 20 を超えているため、もっと簡単な方法があると思いました。

そこで、ステート マシンを次のようにコーディングしました。

    int mState = 0;     
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //
    switch(mState) {
    case 0:
        Boolean flag = videoIntent(url0); 
        break;
    case 1:
        flag = loadImage(img1);
    }
    }


public Boolean videoIntent(String video) {
     mBundle.putString("url",video ); 
     Intent myIntent = new Intent();
     myIntent.putExtras(mBundle);
         myIntent.setClass(mySM.this, SM_vPlayer.class);
         startActivity(myIntent);
             mState ++;
    return true;     
 }

public Boolean loadImage(String image) {
    //load image
            mState ++;
    return true;
}

質問: ビデオを再生するインテントを開始した後 (そのアクティビティには完了を待機するリスナーがあります)、finish() が呼び出されます。

  1. finish() はどこで onCreate、onResume、または別のメソッドに戻りますか?

  2. switch ステートメントに戻るにはどうすればよいですか?

  3. これを行うより良い方法はありますか?

4

2 に答える 2

1

アプリケーションをサブクラス化するか、インテントで状態値を渡すことを検討してください。ユーザーがいずれかの状態でアプリケーションを離れたときにどうなるかを検討する必要があります。

たとえば、常に状態値を渡し、イベント内のアクションが終了したときに値を増やして、次にトリガーされるインテントを返すアプリケーション/静的メソッドを呼び出すことができます。このようにして、バック トレースを保持し、状態ロジックを 1 か所に保持します。

于 2012-07-15T21:51:06.037 に答える
1

メソッドはstartActivity()ノンブロッキングであるため、ビデオが完了する前にループ ( onCreate() メソッドでループを検討している場合) が循環します。代わりに を実行することもできますstartActivityForResult()。これにより、(現在の) アクティビティのコールバックが、開始されたアクティビティが終了したときに呼び出されます。新しいアクティビティによって画像が非表示になるため、待機せずに画像をロードすることもできます。

于 2012-07-15T21:24:28.827 に答える