10

Google은 redux-persist를 사용하여 탐색 상태를 비롯하여 앱 상태를 저장하는 React Native 앱을 제작하고 있습니다. 이 앱이 내비게이션이라는 측면에서 기본 앱처럼 작동하고 싶습니다.React Native, Android 라이프 사이클 및 탐색

기본 Android 앱이 백그라운드로 들어가고 결국 OS에 의해 중단 된 다음 포 그라운드로 이동하면 사용자가 이전에 중단했던 활동. 사용자가 동일한 앱을 죽인 경우 (또는 충돌) 메인 활동에서 열립니다.

RN 앱의 경우 앱이 사용자에 의해 종료되지 않은 경우에만 redux-persist가 지속되어 앱의 componentWillMount에서 탐색 상태를 복원해야 함을 의미합니다.

componentWillMount() { 
    if (global.isRelaunch) { 
    // purge redux-persist navigation state 
    } 
    global.isRelaunch = true; 
... 

을하지만 hackish 보이는 전역이 남아 이유도 이해가 안 :

다음 코드는 작동합니다.

RN 앱이 백그라운드에서 다시 열렸는지 여부를 감지하는 적절한 방법은 무엇입니까? 당신은 react-native

수표로이 예제를 제공하는 API 인 AppState에 살펴 보셔야합니다

답변

1

(이상적으로 아이폰 OS 지원) ​​:

import React, {Component} from 'react' 
import {AppState, Text} from 'react-native' 

class AppStateExample extends Component { 

    state = { 
    appState: AppState.currentState 
    } 

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

    componentWillUnmount() { 
    AppState.removeEventListener('change', this._handleAppStateChange); 
    } 

    _handleAppStateChange = (nextAppState) => { 
    if (this.state.appState.match(/inactive|background/) && nextAppState === 'active') { 
     console.log('App has come to the foreground!') 
    } 
    this.setState({appState: nextAppState}); 
    } 

    render() { 
    return (
     <Text>Current state is: {this.state.appState}</Text> 
    ); 
    } 

} 
+0

나는 AppState와 여기에 도움이 될 것입니다 표시되지 않습니다. 이 코드를 사용하여 앱이 백그라운드에서 다시 열렸는지 확인하려면 어떻게해야합니까? Android가 백그라운드에서 앱을 죽이고 사용자가 다시 열면 다음과 같이 진행됩니다. '_handleAppStateChange'가 실행되고'nextAppState'는'활성 상태입니다. ' 그러나 'this.state.appState'는 정의되지 않았습니다 (앱이 종료 되었기 때문에). 앱이 처음부터 시작되면 똑같은 일이 발생합니다. –

+0

당신은 당신의 질문에 대답하고 있습니다. 이전 상태가 백그라운드 또는 비활성 상태 였고 이제는 포 그라운드로 전환되면 natigation 상태를 재설정해야합니다. 이전 버전이 정의되지 않은 경우 앱이 종료되어 처음부터 시작합니다 (누가 문제가되지는 않습니다) – sfratini

+2

누가 프로세스를 죽였는 지 문제가됩니다! 사용자가 명시 적으로 앱을 죽인 경우 탐색 상태를 재설정하고 싶습니다. 하지만 안드로이드 OS가 프로세스를 죽이면 상태를 재설정하고 싶지 않습니다. 네이티브 앱에서는 savedInstanceState를 사용하여이 경우 상태를 복원합니다. –

0

semirturgay의 대답은 떠나 감지 한 가지 방법입니다 @ 앱. Android의 경우 집 또는 최근 앱 버튼 클릭을 감지하는 것이 좋습니다. 이는 소셜 미디어 또는 사진과 같은 다른 앱에서 앱 내의 조각이 배경 상태를 유발하기 때문입니다. 앱이 여전히 앱에 있기 때문에 원치 않는 행위로 인해 카메라 등의 프로필에 사진이 추가되기 때문입니다. react-native-home-pressed으로 Android에서의 최근 앱 버튼 클릭 수 이 라이브러리는 단순히 Android 버튼 이벤트를 노출합니다.

먼저 라이브러리를 npm i react-native-home-pressed --save과 함께 설치 한 다음 react-native link에 연결하십시오. 그런 다음 앱을 다시 작성하고 다음 스 니펫을 추가하십시오.

import { DeviceEventEmitter } from 'react-native' 
 

 
class ExampleComponent extends Component { 
 
    componentDidMount() { 
 
    this.onHomeButtonPressSub = DeviceEventEmitter.addListener(
 
    'ON_HOME_BUTTON_PRESSED', 
 
    () => { 
 
     console.log('You tapped the home button!') 
 
    }) 
 
    this.onRecentButtonPressSub = DeviceEventEmitter.addListener(
 
    'ON_RECENT_APP_BUTTON_PRESSED', 
 
    () => { 
 
     console.log('You tapped the recent app button!') 
 
    }) 
 
    } 
 
    componentWillUnmount(): void { 
 
    if (this.onRecentButtonPressSub) this.onRecentButtonPressSub.remove() 
 
    if (this.onHomeButtonPressSub) this.onHomeButtonPressSub.remove() 
 
    } 
 
}