나는 웹뷰로 된 앱을 관리 중에 있다. 처음보는 현상이 일어났고 그것을 해결했기에 까먹지 않게 해결 과정을 정리는 해놓을려고 한다.
우선 해당 현상은 블루투스 키보드 연결시 액티비티가 재생성되는 현상이다. 이는 액티비티가 파괴되어서 다시 재생성 되는 것으로 보인다. 그 이유는 블루투스 키보드를 연결시 액티비티의 구성변경이 일어나기 때문에 재생성 되는 것으로 보인다.
재생성에 대해서 자세하게 사이클을 한번 보자면
이런식으로 흘러간다.
하지만 그냥 다른 작업 필요없이 재생성시키지 않고 유지만 시키면 되기 때문에
AndroidMainfest.xml 파일에 있는
<activity
android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"/>
configChanges 에 변경될 수 있는 설정들을 지정해주기로 하였다.
이런식으로 설정을 하면 재생성 대신에 onConfigurationChange() 만을 호출한다.
그래서 편하게 저것만 수정해서 시스템에서 자동으로 흘러갈 수 있도록 해결을 할려했지만,
왠걸 configChanges 에 keyboard|keyboardhidden 을 넣어도 액티비티가 재생성되는 현상이 계속 발생한다.
도저히 이유를 찾을 수가 없었다. 심지어 다른 키보드마다 먹히는게 있었고 안먹히는게 있어서 이유를 모른상태로 onSaveInstanceState() onRestoreInstanceState() 을 쓰는 등 여러가지 방법들을 시도하였는데, 특정 키보드는 아무리해도 해결이 되지 않았다. 2일~3일정도 방법을 계속 찾았지만 해결을 못하던 찰나,
라는 생각이 머리속을 스쳐가고,,,
혹시 몰라서 configChanges 에 넣을 수 있는것들을 하나씩 전부 넣어보면서 찾았는데
<activity
android:name=".MainActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode|mcc|mnc|locale|fontScale|density|navigation"/>
“navigation”: Navigation Type ( 트랙볼 / DPad ) 가 변경되었을 때 ( 보통 절대 일어나지 않는 Case )
후,, 나는 하드웨어에 대해 잘 알지 못하지만,,
이 키보드 녀석을 DPAD 로 인식을 하고 있는거 같았다.
구글링을 했을때도 보통 절대 일어나지 않은 CASE 라고 봤었기에 간과하고 있었는데
이 녀석을 넣으니 아무일도 없었다는듯이 모든게 해결되었다.
혹시 나같은 현상을 겪은 사람들은 configChanges에 하나씩 넣으면서 어떤것으로 인식을 하고 있는지 확인하기 바란ㄷ...ㅠ