자바 안드로이드 앱개발 강좌, 액티비티 생명주기

안드로이드 앱 개발에서 가장 중요한 개념 중 하나는 액티비티(Activity)와 그 생명주기입니다. 액티비티는 사용자 인터페이스(UI)를 구성하는 컴포넌트로, 사용자와 상호작용하는 화면을 나타냅니다. 이번 강좌에서는 자바를 활용한 안드로이드 앱 개발에서 액티비티의 생명주기를 자세히 알아보고, 각 단계에서 수행할 수 있는 작업에 대해 설명하겠습니다.

액티비티란 무엇인가?

액티비티는 안드로이드 애플리케이션의 사용자 인터페이스를 나타내는 컴포넌트로, 앱 내에서 단일 화면을 나타냅니다. 사용자가 앱과 상호작용하는 모든 것은 액티비티 안에서 이루어집니다. 액티비티는 다양한 UI 요소를 포함하여, 사용자에게 정보를 보여주고 사용자와의 상호작용을 처리합니다.

액티비티 생명주기

액티비티 생명주기는 액티비티의 생성부터 소멸까지의 과정을 나타내는 상태(state)와 전환(transition)의 흐름입니다. 안드로이드 시스템은 액티비티의 생명주기를 관리하며, 다음과 같은 주요 메서드가 있습니다:

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onDestroy()
  • onRestart()

1. onCreate()

onCreate() 메서드는 액티비티가 처음 생성될 때 호출됩니다. 주로 UI 설정이나 기초 초기화 작업을 수행합니다. 이 메서드에서는 레이아웃을 설정하고 초기 변수들을 정의합니다.

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

2. onStart()

onStart() 메서드는 액티비티가 사용자에게 보여지기 직전에 호출됩니다. 이 메서드에서는 UI를 초기화하거나, 액티비티가 사용자와 상호작용할 준비가 되었음을 나타냅니다.

@Override
protected void onStart() {
    super.onStart();
    // 액티비티가 사용자에게 보여지기 직전 처리
}

3. onResume()

onResume() 메서드는 액티비티가 사용자 인터페이스에 포커스를 가질 때 호출됩니다. 흔히 UI를 업데이트하거나 애니메이션을 시작하는 등의 작업이 수행됩니다.

@Override
protected void onResume() {
    super.onResume();
    // UI 업데이트 또는 애니메이션 시작
}

4. onPause()

onPause() 메서드는 다른 액티비티가 시작되거나 액티비티가 일시중지될 때 호출됩니다. 이 메서드에서는 데이터를 저장하거나 애니메이션을 정지해야 합니다. 사용자가 이 액티비티를 계속 사용하지 않는다는 것을 나타냅니다.

@Override
protected void onPause() {
    super.onPause();
    // 데이터 저장 및 애니메이션 중지
}

5. onStop()

onStop() 메서드는 액티비티가 더 이상 사용자에게 보이지 않을 때 호출됩니다. 이 단계에서는 자원을 해제하고, 액티비티가 보이지 않을 때 수행해야 할 작업을 처리합니다.

@Override
protected void onStop() {
    super.onStop();
    // 자원 해제 및 정리 작업
}

6. onDestroy()

onDestroy() 메서드는 액티비티가 종료될 때 호출됩니다. 이 메서드에서는 메모리 해제 및 최종적인 정리 작업을 수행할 수 있습니다. 그러나 이 메서드는 호출되지 않을 수도 있으므로, 중요한 데이터는 onPause()onStop()에서 저장하는 것이 좋습니다.

@Override
protected void onDestroy() {
    super.onDestroy();
    // 최종 정리 작업
}

7. onRestart()

onRestart() 메서드는 액티비티가 다시 시작될 때 호출됩니다. 이 메서드는 onStop() 이후에 호출됩니다. 여기에서는 이전 상태를 복원하는 작업을 수행합니다.

@Override
protected void onRestart() {
    super.onRestart();
    // 액티비티 재시작 시 작업
}

생명주기 예제

이제 앞서 설명한 액티비티 생명주기를 종합한 예제를 만들어 보겠습니다. 이 예제에서는 버튼 클릭을 통해 액티비티의 상태를 로그로 출력합니다.

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "Button clicked!");
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart called");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume called");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause called");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop called");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy called");
    }
}

생명주기 관리하기

액티비티의 생명주기를 관리하는 것은 앱의 성능과 사용자 경험에 큰 영향을 미칩니다. 액티비티가 생성되고 소멸되는 과정에서 필요한 데이터는 onPause()onStop()에서 저장하고, 사용자 인터페이스가 변경되었을 때는 onResume()에서 업데이트하는 방식으로 관리해야 합니다.

상태 저장하기

액티비티가 재가동되거나 중단된 후 다시 시작될 때, 필요에 따라 상태를 저장해야 합니다. 이를 위해 onSaveInstanceState() 메서드를 사용할 수 있습니다. 아래는 상태를 저장하는 방법의 예입니다.

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("key", "value");
}

이렇게 저장한 상태는 onCreate() 또는 onRestoreInstanceState()에서 복원할 수 있습니다.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    if (savedInstanceState != null) {
        String value = savedInstanceState.getString("key");
    }
}

결론

안드로이드 액티비티 생명주기는 앱의 기본적인 구성 요소 중 하나로, 이를 이해하고 효과적으로 관리하는 것이 중요합니다. 생명주기의 각 단계에 따라 올바른 방식으로 작업을 수행하면 더 나은 사용자 경험을 제공할 수 있습니다. 이번 강좌를 통해 액티비티 생명주기에 대한 기본적인 이해가 도움이 되길 바랍니다.

이상으로 자바를 활용한 안드로이드 앱 개발에서 액티비티 생명주기에 대해 설명드렸습니다. 실습을 통해 이해를 깊이하고, 다양한 상황에서 생명주기를 잘 활용해보세요!