2012-07-15 67 views
1

我的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; 
} 

问题:开始的意图播放视频(该活动有一个监听器,等待完成),然后结束()被调用后。

  1. where finish()会回到onCreate,onResume或其他方法吗?

  2. 我该如何回到switch语句?

  3. 有没有更好的方法来做到这一点?

回答

1

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

1

您可能会考虑对应用程序进行子分类或将Intent的状态值传入。您应该考虑用户在任何状态下离开应用程序时应该发生的情况。

例如,您可以随时传递状态值,当事件内部的操作完成时增加它,并调用应用程序/静态方法,该方法返回下一个应该触发的意图。这样,您可以保留后面的轨迹,并将您的状态逻辑保存在一个地方。