react native앱을 android 환경에서 QA하는 도중 crash 이슈를 발견했다. 앱이 백그라운드에 있다가 재실행되면 강제종료되어버린다는 내용이었다. 항상 발생하는 문제는 아니었으나, 지속될 경우 앱 지표와 사용성에 충분히 지장을 줄 수 있을만한 이슈로 판단했다.
재현하는 방법은 다음과 같다.
1. 앱이 백그라운드 상태로 충분히 오랫동안 머무른 뒤에 재실행하는 경우
2. 앱이 백그라운드에 있는 상태에서 스마트폰 언어를 변경하고 앱을 실행하는 경우
3. 앱이 백그라운드에 있는 상태에서 스마트폰 폰트 사이즈를 변경하고 앱을 실행하는 경우
검색 결과 'react-native-screens'와 관련된 이슈로, android MainActivity 파일의 onCreate 함수를 수정하는 것으로 해결가능했다.
//before
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//after
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null);
}
사실 이 내용은 react-native-screens의 installation 가이드만 봐도 최상단에 등장하는 내용이므로 꽤나 잘 알려진 문제인것처럼 보이지만, react-native-screens라는 라이브러리 자체가 navigation처럼 다른 필수 라이브러리를 설치하는데 필요한 부수적인 준비물(?)이라는 포지션이 강하기 때문에 문서를 제대로 읽지 않아 생긴 헤프닝이었다. 지금까지 react-native-screens나 react-native-gesture-handler, react-native-masked-view 같은 라이브러리들이 정확히 무슨 역할을 하는지 파악하지 않고 관성처럼 설치해서 사용하고 있었는데, 지난날의 안일함을 반성하는 계기가 되었다.
react-native-screens github: https://github.com/software-mansion/react-native-screens
관련 github 이슈 논의: https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704633