이슈 발생
java.lang.IllegalStateException: Must be called from main thread
작업하는 앱 특성 상 단말기에서 받아온 시간에 맞춰 다크모드를 실행해줘야 하는 문제로 Thread 클래스의 start 메소드를 호출하여 백그라운드 스레드를 사용 중에 있었다.

그런데 AppCompatDelegateImpl 클래스에서 updateAppConfiguration 메소드 호출 시 상단의 Exception 이 발생하며 앱이 죽는 현상이 발견됬다.
원인 파악
다크모드 설정 시 AppCompatDelegate.setDefaultNightMode 메소드 호출은 메인 스레드에서 이뤄져야 한다. config 변경 값을 적용하는 과정에서 ActivityCompat 클래스의 recreate 메소드가 호출되면서 UI 작업을 하기 때문이다. 따라서 스레드의 작업환경을 메인 스레드로 변경해주는 방법을 많이들 사용하였다.


문제 해결
필자는 메인 스레드를 각각 지정해주는 방법은 명시적으로는 좋은 방법이긴 하지만 작업하는 앱 특성 상 이곳 저곳에서 자주 호출을 해줘야하기에 코드가 불필요하게 길어질 것이라 판단하였다.
따라서 Manifest 에서 액티비티를 선언해줄때 "configChage=uiMode" 를 설정해주는 방법을 선택했다.
이 경우 config 값이 변경되어도 recreate 를 호출하지 않고 onConfigurationChange를 호출하게 되어 메인 스레드를 지정해주지 않아도 앱이 죽지 않는다.
물론 이 방법은 각자 작업하는 환경에 맞춰 선택해야하므로 주의하기 바란다.