이 튜토리얼에서는 코틀린(Kotlin)을 사용하여 안드로이드 애플리케이션이 현재 백그라운드에서 실행 중인지 확인하는 방법을 단계별로 알아봅니다.
핵심 원리는 ActivityManager.getMyMemoryState() 메서드를 활용해 현재 프로세스의 상태 정보를 가져오고, 그중 importance 값이 포그라운드(FOREGROUND)인지 아닌지를 판단하는 것입니다.
1단계: 새 프로젝트 생성
Android Studio를 실행하고 File → New Project 메뉴로 이동한 뒤, 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.
2단계: 레이아웃 파일 작성
res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="4dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:background="#008080"
android:padding="5dp"
android:text="TutorialsPoint"
android:textColor="#fff"
android:textSize="24sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Checking if Android Application is running in Background"
android:textAlignment="center"
android:textColor="@android:color/holo_red_light"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>3단계: MainActivity.kt 작성
src/MainActivity.kt 파일에 아래 코드를 추가합니다.
import android.app.ActivityManager
import android.app.ActivityManager.RunningAppProcessInfo
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
var appRunningBackground: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
val runningAppProcessInfo = RunningAppProcessInfo()
ActivityManager.getMyMemoryState(runningAppProcessInfo)
appRunningBackground = runningAppProcessInfo.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND
if (appRunningBackground) {
Toast.makeText(applicationContext, "Your Android Application is Running in Background", Toast.LENGTH_SHORT).show()
}
else {
Toast.makeText(applicationContext, "Your Android Application is not Running in Background", Toast.LENGTH_SHORT).show()
}
}
override fun onPause() {
super.onPause()
Toast.makeText(applicationContext, "Your Android Application is Running in Background", Toast.LENGTH_SHORT).show()
}
}코드 설명
RunningAppProcessInfo 객체를 생성한 후 ActivityManager.getMyMemoryState()에 전달하면, 시스템이 현재 앱 프로세스의 메모리 상태와 중요도(importance)를 채워 줍니다. 이 값이 IMPORTANCE_FOREGROUND가 아니라면 앱이 백그라운드에 있다고 판단할 수 있습니다. 또한 onPause() 콜백은 화면에서 앱이 벗어나는 순간 호출되므로, 이 시점에 백그라운드 진입 여부를 감지하는 데 활용됩니다.
4단계: AndroidManifest.xml 확인
androidManifest.xml 파일에 아래 코드를 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.q11">
<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/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>앱 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 실행(Run) 아이콘
을 클릭하세요. 목록에서 자신의 모바일 기기를 선택하면, 기기 화면에 결과가 표시됩니다.
앱을 처음 실행하면 포그라운드 상태이므로 "앱이 백그라운드에서 실행 중이 아닙니다"라는 토스트 메시지가 나타나고, 홈 버튼을 눌러 앱을 벗어나면 onPause()가 호출되며 "앱이 백그라운드에서 실행 중입니다"라는 메시지를 통해 백그라운드 진입을 확인할 수 있습니다.

