안드로이드 애플리케이션을 개발하다 보면 가장 먼저 마주하게 되는 것이 Activity
입니다. Activity
는 안드로이드에서 화면을 구성하고 사용자와 상호작용하는 가장 기본적인 컴포넌트입니다. 오늘 포스팅에서는 Activity
가 무엇인지, 어떻게 활용할 수 있는지 알아보고, 간단한 예제 코드를 통해 Activity
를 직접 구현해 보겠습니다.
Activity란 무엇인가?
Activity
는 안드로이드 애플리케이션에서 사용자와 상호작용하는 화면을 담당합니다. 애플리케이션에서 여러 개의 화면을 가질 수 있는데, 각각의 화면이 Activity
에 해당합니다. 각 Activity
는 애플리케이션의 한 화면을 구성하고, 사용자가 화면을 이동하거나 새로운 기능을 사용할 때마다 새로운 Activity
가 실행됩니다.
기본적으로 Activity
는 다음과 같은 주요 생명주기 메서드를 가집니다.
onCreate()
:Activity
가 처음 생성될 때 호출됩니다.onStart()
:Activity
가 사용자에게 표시되기 바로 전에 호출됩니다.onResume()
:Activity
가 사용자와 상호작용을 시작할 때 호출됩니다.onPause()
: 다른 화면이 앞에 나타나면 호출됩니다.onStop()
:Activity
가 사용자에게 더 이상 보이지 않을 때 호출됩니다.onDestroy()
:Activity
가 종료될 때 호출됩니다.
이러한 생명주기 메서드를 잘 활용하면 Activity
의 상태 변화에 따른 적절한 처리를 할 수 있습니다.
간단한 예제 코드 작성하기
이번에는 간단한 Activity
를 만들어 보겠습니다. 이 예제에서는 기본적인 Activity
생성과 생명주기 메서드의 동작을 살펴보겠습니다. 예제 코드는 Kotlin을 사용해 작성했습니다.
package com.example.myfirstapp
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
// 태그 상수 선언
private val TAG = "MainActivity"
// onCreate 메서드: Activity가 생성될 때 호출
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d(TAG, "onCreate called")
}
// onStart 메서드: Activity가 사용자에게 보여지기 시작할 때 호출
override fun onStart() {
super.onStart()
Log.d(TAG, "onStart called")
}
// onResume 메서드: Activity가 사용자와 상호작용하기 시작할 때 호출
override fun onResume() {
super.onResume()
Log.d(TAG, "onResume called")
}
// onPause 메서드: 다른 Activity가 나타나기 직전에 호출
override fun onPause() {
super.onPause()
Log.d(TAG, "onPause called")
}
// onStop 메서드: Activity가 더 이상 사용자에게 보여지지 않을 때 호출
override fun onStop() {
super.onStop()
Log.d(TAG, "onStop called")
}
// onDestroy 메서드: Activity가 소멸될 때 호출
override fun onDestroy() {
super.onDestroy()
Log.d(TAG, "onDestroy called")
}
}
위의 코드는 MainActivity
라는 기본적인 Activity
를 정의합니다. Activity
의 생명주기 메서드에서 로그 메시지를 출력하여 각 단계에서 어떤 메서드가 호출되는지 쉽게 추적할 수 있습니다. 이 예제를 실행하면 로그캣(Logcat)을 통해 Activity
의 상태 변화에 따라 각 메서드가 언제 호출되는지 확인할 수 있습니다.
AndroidManifest.xml에 Activity 추가하기
Activity
를 새로 생성한 후에는 AndroidManifest.xml
파일에 해당 Activity
를 등록해야 합니다. AndroidManifest.xml
은 애플리케이션의 모든 컴포넌트를 정의하는 파일로, 각 Activity
를 시스템에 알려주는 역할을 합니다.
아래는 MainActivity
를 AndroidManifest.xml
에 추가하는 예시입니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myfirstapp">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyFirstApp">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- SecondActivity 추가 -->
<activity android:name=".SecondActivity" />
</application>
</manifest>
위의 코드에서 <activity>
태그를 사용하여 MainActivity
를 추가합니다. intent-filter
는 이 Activity
가 애플리케이션의 시작 지점임을 나타냅니다. android.intent.action.MAIN
은 이 Activity
가 메인 진입점임을 의미하며, android.intent.category.LAUNCHER
는 애플리케이션 아이콘이 런처에 표시되도록 합니다.
SecondActivity
를 추가할 때는 <activity android:name=".SecondActivity" />
형태로 간단히 추가하면 됩니다. 새로운 Activity
를 생성할 때마다 반드시 이와 같이 AndroidManifest.xml
파일에 해당 Activity
를 등록해 주어야 합니다.
Activity 생명주기 활용하기
Activity
의 생명주기를 이해하는 것은 효율적인 안드로이드 애플리케이션을 개발하는 데 매우 중요합니다. 예를 들어, 다음과 같은 상황에서 생명주기 메서드를 적절히 활용할 수 있습니다.
- onCreate(): 화면 초기화와 관련된 코드 (예: UI 설정, 초기 데이터 로딩 등)를 작성합니다.
- onStart():
Activity
가 화면에 표시되기 바로 전에 실행할 코드를 작성합니다. - onResume(): 사용자가 화면과 상호작용하기 직전에 필요한 준비 작업을 처리합니다. 예를 들어, 센서 데이터 수신을 시작하거나 카메라를 활성화할 수 있습니다.
- onPause(): 사용자가
Activity
를 떠나기 전에 데이터를 저장하거나 리소스를 해제해야 할 때 사용합니다. 예를 들어, 센서 업데이트를 중지하거나 애니메이션을 일시 정지할 수 있습니다. - onStop():
Activity
가 사용자에게 보이지 않게 될 때, 리소스를 효율적으로 해제하고 데이터를 저장할 수 있습니다. - onDestroy():
Activity
가 완전히 종료될 때, 모든 남은 리소스를 정리합니다.
Activity 간 데이터 전달하기
대부분의 안드로이드 애플리케이션에서는 여러 개의 Activity
를 사용하여 화면 전환을 하고, 서로 간의 데이터를 전달합니다. 이를 위해 Intent
를 사용합니다.
다음은 두 개의 Activity
간에 데이터를 전달하는 예제입니다.
MainActivity에서 SecondActivity로 이동하기
먼저 MainActivity
에서 버튼 클릭을 통해 SecondActivity
로 이동하면서 데이터를 전달해 보겠습니다.
MainActivity
코드:
package com.example.myfirstapp
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val button = findViewById<Button>(R.id.button)
button.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("EXTRA_MESSAGE", "Hello, Second Activity!")
startActivity(intent)
}
}
}
SecondActivity
코드:
package com.example.myfirstapp
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val message = intent.getStringExtra("EXTRA_MESSAGE")
val textView = findViewById<TextView>(R.id.textView)
textView.text = message
}
}
위 예제에서 MainActivity
는 버튼 클릭 시 Intent
를 사용해 SecondActivity
로 이동합니다. 이때 putExtra()
메서드를 사용해 데이터를 전달하고, SecondActivity
에서는 getStringExtra()
메서드를 사용해 해당 데이터를 수신합니다.
결론
Activity
는 안드로이드 애플리케이션의 핵심 구성 요소로, 사용자와의 상호작용을 관리하는 중요한 역할을 합니다. 오늘은 Activity
의 기본 개념과 생명주기를 이해하고, 간단한 예제 코드를 통해 Activity
를 직접 구현해 보았습니다. 또한, 여러 Activity
간의 데이터 전달 방법에 대해서도 살펴보았습니다.
안드로이드 개발을 처음 접하는 분들에게는 Activity
의 생명주기를 이해하고 적절하게 활용하는 것이 매우 중요합니다. 생명주기 메서드의 호출 시점을 잘 파악하고, 상황에 맞는 적절한 처리를 통해 안정적이고 효율적인 애플리케이션을 개발해 보세요.
'Android' 카테고리의 다른 글
Android - Foreground Service(백그라운드 작업), Bound Service(애플리케이션 간 상호작용) (0) | 2024.11.17 |
---|---|
Android - Service (0) | 2024.11.16 |
Android - 인텐트(Intent), 브로드캐스트(Broadcast) (0) | 2024.11.14 |
Android UI : 다이얼로그(Dialog) (0) | 2024.11.13 |
Android UI : Layout 장단점 (0) | 2024.11.12 |