国家机器和意图

时间:2012-07-15 20:59:15

标签: android android-layout

我的Android应用程序需要像状态机一样运行一系列事件

活动1:播放视频#1

事件2:加载图像并等待按下按钮

活动3:播放视频#2

等...

一种做法是为每个事件生成一个单独的活动,但有超过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. 有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

startActivity()方法是非阻塞的,因此您的循环(假设您正在考虑onCreate()方法中的循环)将在视频完成之前循环。您可以改为执行startActivityForResult(),这会导致在您的(当前)活动中回调,当启动的活动结束时()'d。您也可以在不等待的情况下加载图像,因为新活动会导致您的图像被隐藏。

答案 1 :(得分:1)

您可以考虑对Application进行子类化或使用Intent传递state值。您应该考虑当用户在任何州离开应用程序时应该发生什么。

例如,您可以始终传递状态值,在事件内部的操作完成时增加它,并调用Application / static方法,该方法返回应该触发的intent。这样,您可以保留后向跟踪并将状态逻辑保存在一个位置。