본문 바로가기
개발/Android

[Android] 멀티 윈도우 실행(onCreate, onDestory 대응)

by 준그래머 2023. 12. 18.
반응형

멀티 윈도우 생명주기

멀티 윈도우를 작동하거나 빠져 나가면 이미 생성된 액티비티가 onDestroy ⇒ onCreate를 해주며 재 생성 된다. 문제는 이 과정에서 데이터를 초기화 하지 않으면 onCreate 중에 크래시 또는 데이터가 이상하게 나오는 현상이 발생한다.

 

따라서 멀티 윈도우 실행할 때 onConfigurationChanged 함수가 호출되는 방법에 대해 정리할 예정이다.

 

멀티 윈도우 대응하기

AndroidManifest.xml의 Activity에 속성 추가

<activity
    ...
    android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation">
    ....
</activity>

configChanges 속성에 [screenSize|smallestScreenSize|screenLayout|orientation] 을 추가해 준다.

 

 

위 속성이 추가되면 onConfigurationChanged 함수에서 관리할 수 있다.

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    int screenSizeType = newConfig.screenLayout & SCREENLAYOUT_SIZE_MASK;
    if(screenSizeType == SCREENLAYOUT_SIZE_SMALL) {
        Log.d(TAG, "SCREEN SMALL SIZE => screenWidthDp=" + newConfig.screenWidthDp + ", screenHeightDp=" + newConfig.screenHeightDp);
    }
    else if(screenSizeType == SCREENLAYOUT_SIZE_NORMAL) {
        Log.d(TAG, "SCREEN SIZE NORMAL => screenWidthDp=" + newConfig.screenWidthDp + ", screenHeightDp=" + newConfig.screenHeightDp);
    }
    else if(screenSizeType == SCREENLAYOUT_SIZE_LARGE) {
        Log.d(TAG, "SCREEN SIZE LARGE => screenWidthDp=" + newConfig.screenWidthDp + ", screenHeightDp=" + newConfig.screenHeightDp);
    }
    else{
        Log.d(TAG, "screenSizeType=" + screenSizeType + " => screenWidthDp=" + newConfig.screenWidthDp + ", screenHeightDp=" + newConfig.screenHeightDp );
    }
}

 

zFlip5 기준(Android13)으로 멀티 윈도우 실행 시 아래와 같은 로그가 찍힌다.

 

12-18 16:44:28.690 D 19244 19244 JYPARK : SCREEN SMALL SIZE => screenWidthDp=411, screenHeightDp=457

 

참조

 

멀티 윈도우 지원  |  Android 개발자  |  Android Developers

멀티 윈도우 지원 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android는 여러 앱이 같은 화면을 동시에 공유할 수 있도록 합니다. 시스템에서는 두 앱을 나

developer.android.com