라이프사이클 모듈 (Lifecycle Module)

자바스크립트를 통한 앱 라이프사이클 관리

라이프사이클이란 앱이 실행된 후부터 종료될 때까지의 시간을 의미합니다. 이 시간동안 앱은 여러번의 상태 변화를 겪게 되는데요. Lifecycle 모듈을 통해서 상태들을 확인하고 변경될 때마다 알림을 받을 수 있습니다.

상태값들

– Starting
– Background
– Foreground
– Interactive

Starting

앱이 처음 시작되었을 때를 의미합니다.

Background

홈버튼을 누르거나 전화를 받는 것과 같이 앱에서 잠시 빠져나간 상태입니다. 일반적으로 Suspend 상태라고 부르기도 합니다.

Foreground

Background 상태에서 앱으로 돌아온 상태입니다.

Interactive

Foreground로 돌아온 후 사용자의 입력을 받아들이는 상태입니다.

상태 변화

각 상태들은 아래와 같이 변화합니다. 즉, Starting 이후부터 Background, Foreground, Interactive를 반복하다가 앱이 종료될 때 Terminating 상태가 됩니다.
Starting ↓ Background <-> Foreground <-> Interactive ↓ Terminating

onTerminating 이벤트는 없음

앱이 종료하는 것에 대한 이벤트는 불확실한 경우(메모리 부족, 긴급 전화 등)가 있습니다. 따라서, 퓨즈는 혼란을 가져올 수 있는 onTerminating 이벤트를 제외시키기로 결정했습니다.

[[ MainView.ux ]]

<App>
    <JavaScript>
        var Lifecycle = require('FuseJS/Lifecycle');

        Lifecycle.onEnteringForeground = function() {
            console.log ("onEnteringForeground");
        };
        Lifecycle.onEnteringInteractive = function() {
            console.log ("onEnteringInteractive");
        };
        Lifecycle.onExitedInteractive = function() {
            console.log ("onExitedInteractive");
        };
        Lifecycle.onEnteringBackground = function() {
            console.log ("onEnteringBackground");
        };
    </JavaScript>
    <StackPanel>
        <Text TextWrapping="Wrap">로그 확인을 위해 퓨즈 모니터를 여세요.</Text>
    </StackPanel>
</App>

위 예제는 한글이 보이지 않습니다. 텍스트를 영문으로 변경하시거나 아래와 같이 폰트를 삽입하시면 됩니다. .ttf 파일은 MainView.ux와 동일한 폴더에 넣어주세요.

<App>
    <Font ux:Global="KoreanFont" File="malgun.ttf" />

    <JavaScript>
        ...
    </JavaScript>
    <StackPanel>
        <Text TextWrapping="Wrap" Font="KoreanFont">로그 확인을 위해 퓨즈 모니터를 여세요.</Text>
    </StackPanel>
</App>

iOS의 경우 아래의 코드로 onTerminating을 구현할 수 있다고 합니다. 다만, 우노를 써야 하는데 일단 샘플 코드만 담아둡니다. (-:

[[NSNotificationCenter defaultCenter]
     addObserverForName:(NSNotificationName)UIApplicationWillTerminateNotification
     object:[UIApplication sharedApplication]
     queue:nil
     usingBlock: ^void(NSNotification *note) {
        NSLog(@"App is about to terminate")
        callback();
     }
];

#퓨즈 #퓨즈툴 #퓨즈툴즈 #퓨즈툴스 #Fuse #Fusetools #모바일 #앱 #크로스플랫폼 #iOS #Android #안드로이드 #Objective-C #Swift #Java #C++ #우노 #Uno