Прослушивание приложений происходит в фоновом режиме - есть ли способ, чтобы быть уверенным, чтобы завершить мой процесс, прежде чем ОС очистить все - PullRequest
0 голосов
/ 28 января 2019

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

В настоящее время я обновляю свои документы в Redux благодаря onViewableItemsChanged, чтобы у них был флаг «читать» или «не читать».

Идея заключалась в том, что когда-либо приложение приходит вна переднем плане я установил свои последние 20 документов (только последние 20 получили функцию), которые уже были прочитаны в асинхронном хранилище.

Однако настройка документов в AsyncStorage выполняется асинхронно, поэтому я не могу быть уверен, что я установил документы до того, как приложение полностью очистится от памяти ОС.

Я использовал AppState из response-native, потому что когда пользователь убивает приложение, компонент lifeCycle не запускает componentWillunmount.

class App extends Component {
    state = {
        appState: AppState.currentState
    };

    handleAppStateChange = nextAppState => {           
        if (nextAppState.match(/inactive|background/)) {
            console.log('App has come to the background!');
            // setTimeout to mock an hypothetical set in the async storage that could take some times 
            setTimeout(() => {
                console.log('Not triggered if I closed the app fastly');
            }, 1000);
        }
        this.setState({ appState: nextAppState });
    };

    componentDidMount() {
        AppState.addEventListener('change', this.handleAppStateChange);
    }

    componentWillunmount() {
        AppState.removeEventListener('change', this.handleAppStateChange);
    }
}

Приведенный выше код показывает, как я могу слушать, еслиПриложение вышло на передний план.Выбор моих последних 20 документов из Redux и установка их в AsyncStorage может занять некоторое время.

Итак, давайте представим, что пользователь быстро убивает приложение (используя, например, многозадачность), мое лечение не закончится, ипоэтому моя функция не сможет установить эти документы ...

Есть ли самый простой способ добиться того, что я пытаюсь реализовать там?

...