我的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()。
finish()将返回onCreate,onResume还是其他方法?
如何返回switch语句?
有更好的方法吗?
答案 0 :(得分:1)
startActivity()
方法是非阻塞的,因此您的循环(假设您正在考虑onCreate()方法中的循环)将在视频完成之前循环。您可以改为执行startActivityForResult()
,这会导致在您的(当前)活动中回调,当启动的活动结束时()'d。您也可以在不等待的情况下加载图像,因为新活动会导致您的图像被隐藏。
答案 1 :(得分:1)
您可以考虑对Application进行子类化或使用Intent传递state值。您应该考虑当用户在任何州离开应用程序时应该发生什么。
例如,您可以始终传递状态值,在事件内部的操作完成时增加它,并调用Application / static方法,该方法返回应该触发的intent。这样,您可以保留后向跟踪并将状态逻辑保存在一个位置。