наблюдаемый - разница между concat и concatMap

Наряду с настройкой приложения с приемником BOOT и этот ответ для предотвращения расширения строки состояния, это решение работает в 4.4 и выше как полное приложение для киоска:

Место в вашем onCreate ():

    final View view = (View) findViewById(android.R.id.content);
    if (view != null) {
        //"hides" back, home and return button on screen. 
        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                   View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                   View.SYSTEM_UI_FLAG_FULLSCREEN);
        view.setOnSystemUiVisibilityChangeListener
                (new View.OnSystemUiVisibilityChangeListener() {
                    @Override
                    public void onSystemUiVisibilityChange(int visibility) {
                        // Note that system bars will only be "visible" if none of the
                        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
                        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                    View.SYSTEM_UI_FLAG_FULLSCREEN);
                        }
                    }
                });
    }

Это полностью скроет кнопку «Назад», кнопку «Приложения» и «Главная».

1
задан Mudd 16 January 2019 в 11:31
поделиться

1 ответ

Я думаю, что не совсем понимаю ваш вариант использования, но главное отличие между concatMap и concat состоит в том, что concatMap принимает в качестве параметра функцию, которая вызывается для каждого элемента из его источника и которая возвращает внутренняя наблюдаемая (она отображает каждый элемент из своего источника в наблюдаемую). concatMap затем вызывает свой обратный вызов только тогда, когда завершаются предыдущие внутренние Observables.

С другой стороны concat просто принимает список наблюдаемых, которые подписываются на них один за другим, когда завершается предыдущая наблюдаемая.

Так что в вашем случае первый пример просто «отображает» FAKE_LOGIN_AUTHENTICATING на FAKE_LOGIN_SUCCESS.

Во втором примере внутренний блок эквивалентен этому:

concat(
  of({ type: 'FAKE_LOGIN_AUTHENTICATING' }),
  of({ type: 'FAKE_LOGIN_SUCCESS', payload: { userId: 'user-a', userData: {}}}).pipe(
    delay(2000),
  )
)

Таким образом, он сначала подписывается на of({ type: 'FAKE_LOGIN_AUTHENTICATING' }), который генерирует и завершает немедленно, а затем подписывается на of({ type: 'FAKE_LOGIN_SUCCESS'...), который генерирует также затем завершает.

0
ответ дан martin 16 January 2019 в 11:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: