Мое приложение для 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;
}
Вопросы: После запуска намерения воспроизвести видео (в этом мероприятии есть слушатель, ожидающий завершения), а затем вызывается().
Где будет завершено() вернуться к onCreate, onResume или другому методу?
Как мне вернуться к инструкции switch?
Какие-нибудь лучшие способы сделать это?
Метод startActivity()
не блокируется, поэтому ваш цикл (предполагая, что вы рассматриваете цикл в методе onCreate()) будет циклически проходить до завершения видео. Вместо этого вы можете выполнить startActivityForResult()
, что вызовет обратный вызов в вашей (текущей) активности, которая будет вызываться, когда закончится startActivityForResult()
операция() 'd. Вы также можете загрузить изображение без ожидания, так как новая активность заставит вас скрываться.
Вы можете подумать о том, чтобы подкрыть приложение или передать значение состояния с помощью Intent. Вы должны учитывать, что должно произойти, когда пользователь покидает приложение в любом из ваших состояний.
Например, вы всегда можете передать значение состояния, увеличить его, когда действие внутри события будет завершено, и вызвать метод Application/static, который возвращает намерение, которое должно срабатывать следующим образом. Таким образом, вы сохраняете обратную трассировку и сохраняете свою логику состояния в одном месте.