Frontend/이론

167. [AI][Android Studio] 로직개발하기 : Android 액티비티(Activity)란?

천재단미 2025. 3. 4. 18:07
728x90
반응형

 

 

 

 

 

 

안드로이드 개발을 하다 보면 Activity는 가장 자주 마주치는 구성요소입니다.

하지만 단순히 화면을 만드는 것에 그치고, Activity가 어떤 구조로 작동하는지,

라이프사이클은 어떻게 흐르는지, 그리고 올바르게 사용하는 방법을 모르는 경우가 많습니다.

이 글에서는 Activity의 개념부터 생명주기(Lifecycle),

실무에서 주의해야 할 포인트까지 정리해봅니다.


1. Activity란 무엇인가요?

안드로이드의 앱은 여러 화면으로 구성되어 있고, 그 하나하나가 바로 Activity입니다.

예를 들어, 로그인 화면, 홈 화면, 결제 화면 모두 각각 Activity로 구성되어 있죠.

즉, **Activity = 사용자와 상호작용하는 UI 단위이자 앱의 진입점(Entry Point)**입니다.


2. Entry Point란?

보통 Java/C++에서는 main() 함수가 앱의 시작 지점이죠.

하지만 안드로이드는 단일 진입점이 아닌 **4대 컴포넌트(Activity, Service, BroadcastReceiver, ContentProvider)**를 통해 다양한 경로로 앱 실행이 가능합니다.

이 중 Activity는 사용자와 직접 상호작용하는 UI 진입점으로 가장 대표적인 Entry Point입니다.

 

<!-- AndroidManifest.xml -->
<application>
    <activity android:name=".MainActivity" />
</application>

 

Manifest.xml에 등록하지 않으면 시스템이 해당 Activity를 인식하지 못합니다.


3. Activity 설계 전략

  • 화면마다 무조건 새로운 Activity를 만드는 것은 비효율적입니다.
  • 간단한 UI 변화라면 Fragment, Dialog, Popup 등으로 충분히 구현 가능해요.
  • Activity는 리소스가 크고 생명주기 관리가 복잡하므로, 필요할 때만 생성하는 것이 좋습니다.


4. Activity의 생명주기(Lifecycle)

Activity는 앱이 실행되면서 생성되고, 사용자가 나가거나 기기가 회전할 때마다 상태가 바뀌어요.

이러한 상태 변화에 따라 총 6개의 주요 콜백 메서드가 호출됩니다.

4-1. onCreate()

  • Activity가 처음 생성될 때 한 번 호출
  • UI 레이아웃 연결, ViewModel 초기화, 리스너 등록 등 초기 설정
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
}

4-2. onStart()

  • Activity가 화면에 표시되기 직전 호출
  • UI 요소를 보여주기 위한 준비 단계

4-3. onResume()

  • Activity가 화면에 완전히 나타나고 포커스를 가질 때 호출
  • 사용자와의 실질적 상호작용이 가능한 상태
override fun onResume() {
    super.onResume()
    // 리소스 재연결, 센서 등록 등
}


4-4. onPause()

  • 새로운 Activity가 시작되거나, 화면 일부가 가려질 때 호출
  • 리소스를 해제하거나 저장할 작업을 여기에 수행
override fun onPause() {
    super.onPause()
    // 음악 정지, 센서 제거, 애니메이션 중지 등
}

4-5. onStop()

  • Activity가 더 이상 사용자에게 보이지 않을 때
  • 오래 걸리는 저장 작업(DB 저장, 파일 쓰기 등)을 수행

4-6. onDestroy()

  • Activity가 완전히 종료되기 직전 호출
  • 리소스 해제의 마지막 기회

5. 생명주기 흐름 정리

상황 호출 순서

앱 시작 onCreate → onStart → onResume
화면 회전 onPause → onStop → onDestroy → onCreate...
홈 버튼 누름 onPause → onStop
돌아올 때 onRestart → onStart → onResume
백버튼으로 종료 onPause → onStop → onDestroy

6. 액티비티 전환 시 주의사항

Activity A → B로 전환할 경우

호출 순서:

  • A: onPause() 호출
  • B: onCreate() → onStart() → onResume() 호출
  • A: 이후 onStop() 호출

즉, B가 완전히 보여진 후에야 A의 onStop()이 호출됩니다.

💡 onPause에서 리소스를 해제하면, B에서는 아직 그 값이 저장되지 않을 수 있음

→ onStop에서 해제 or 저장하도록 설계하세요.


7.생명주기 사용 시 주의사항

7-1. 리소스는 항상 대칭적으로 관리하세요

생성 해제

onCreate onDestroy
onResume onPause
// 예시
override fun onCreate() {
    db = DBHelper(this)
}
override fun onDestroy() {
    db.close()
}


7-2. finish() 후에는 반드시 return으로 종

if (조건) {
    finish()
    return  // 이후 로직이 실행되지 않게 막기
}


8. 실무 적용 예시: ViewBinding + 라이프사이클 연동

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnStart.setOnClickListener {
            // 액션 처리
        }
    }
}


9. 참고자료


10. 마무리

Activity는 단순한 "화면"을 넘어서 상태를 관리하고 사용자와 상호작용하는 핵심 컴포넌트입니다.

생명주기를 제대로 이해하고 관리하지 않으면 메모리 누수, 데이터 손실, 앱 충돌까지 발생할 수 있어요.

이번 기회에 Activity 구조와 동작 원리를 확실히 잡고 가세요!

728x90
반응형
home top bottom
}