State Machine и Intents

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. Где будет завершено() вернуться к onCreate, onResume или другому методу?

  2. Как мне вернуться к инструкции switch?

  3. Какие-нибудь лучшие способы сделать это?

Теги:
android-layout

2 ответа

1
Лучший ответ

Метод startActivity() не блокируется, поэтому ваш цикл (предполагая, что вы рассматриваете цикл в методе onCreate()) будет циклически проходить до завершения видео. Вместо этого вы можете выполнить startActivityForResult(), что вызовет обратный вызов в вашей (текущей) активности, которая будет вызываться, когда закончится startActivityForResult() операция() 'd. Вы также можете загрузить изображение без ожидания, так как новая активность заставит вас скрываться.

1

Вы можете подумать о том, чтобы подкрыть приложение или передать значение состояния с помощью Intent. Вы должны учитывать, что должно произойти, когда пользователь покидает приложение в любом из ваших состояний.

Например, вы всегда можете передать значение состояния, увеличить его, когда действие внутри события будет завершено, и вызвать метод Application/static, который возвращает намерение, которое должно срабатывать следующим образом. Таким образом, вы сохраняете обратную трассировку и сохраняете свою логику состояния в одном месте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню