예제를 살펴보기 전에 스레드(Thread)가 무엇인지 간단히 알아보겠습니다. 스레드는 경량화된 하위 프로세스로, UI를 방해하지 않고 백그라운드 작업을 수행하는 역할을 합니다. 이번 글에서는 안드로이드 앱에서 현재 실행 중인 스레드의 전체 스택 트레이스를 getAllStackTraces() 메서드를 통해 확인하는 방법을 단계별로 소개합니다.
1단계: 새 프로젝트 생성
Android Studio를 열고 File → New Project 메뉴로 이동한 뒤, 새 프로젝트 생성에 필요한 모든 세부 정보를 입력하여 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성 (res/layout/activity_main.xml)
아래 코드를 activity_main.xml에 추가합니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_marginTop="100dp"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>위 코드에는 하나의 TextView가 포함되어 있으며, 이 TextView에 현재 스레드의 스택 트레이스 정보가 출력됩니다.
3단계: MainActivity 작성 (src/MainActivity.java)
아래 코드를 MainActivity.java에 추가합니다.
package com.example.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text);
textView.setText("Current thread" + Thread.getAllStackTraces());
}
}핵심 코드는 Thread.getAllStackTraces() 호출 부분입니다. 이 정적 메서드는 JVM(자바 가상 머신)에서 실행 중인 모든 스레드의 스택 트레이스를 Map 형태로 반환하며, 이를 문자열로 변환해 TextView에 표시합니다. 디버깅 시 어떤 스레드가 어떤 코드 경로를 실행하고 있는지 파악하는 데 유용하게 활용할 수 있습니다.
애플리케이션 실행하기
이제 앱을 실행해 보겠습니다. 실제 안드로이드 기기가 컴퓨터와 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run(실행) 아이콘을 클릭하세요. 목록에서 본인의 모바일 기기를 선택하면, 기기 화면에 아래와 같은 결과가 표시됩니다.

실행 결과를 보면 현재 스레드의 스택 트레이스 정보가 화면에 그대로 출력된 것을 확인할 수 있습니다. 이처럼 getAllStackTraces()를 활용하면 앱 내부에서 동작 중인 스레드들의 상태를 손쉽게 진단할 수 있습니다.