Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

onSaveInstanceState로 Android 액티비티 상태 저장하는 방법 완벽 가이드

Android에서 인스턴스 상태 저장으로 액티비티 상태 유지하기

이 튜토리얼에서는 onSaveInstanceStateonRestoreInstanceState 콜백 메서드를 사용하여 Android 액티비티의 상태를 저장하고 복원하는 방법을 단계별로 알아봅니다.

앱이 실행되는 도중 화면 회전이나 시스템에 의한 프로세스 종료가 발생하면 액티비티가 소멸되고 재생성됩니다. 이때 Bundle 객체를 활용해 데이터를 임시 저장하면 화면이 다시 그려질 때도 기존 상태를 그대로 유지할 수 있습니다.

1단계: 새 프로젝트 생성

Android Studio에서 File → New Project를 선택하고, 새 프로젝트 생성에 필요한 모든 세부 정보를 입력하여 프로젝트를 만듭니다.

2단계: 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
    xmlns:app = "https://schemas.android.com/apk/res-auto"
    xmlns:tools = "https://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:gravity = "center"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity"
    android:orientation = "vertical">
    <TextView
        android:id = "@+id/actionEvent"
        android:textSize = "40sp"
        android:layout_marginTop = "30dp"
        android:layout_width = "wrap_content"
        android:layout_height = "match_parent" />
</LinearLayout>

위 코드에서는 복원된 인스턴스 데이터를 화면에 표시하기 위한 TextView를 배치했습니다.

3단계: MainActivity 코드 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다.

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView actionEvent;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        actionEvent = findViewById(R.id.actionEvent);
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        savedInstanceState.putString("MyString", "Welcome back to Android");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        String myString = savedInstanceState.getString("MyString");
        actionEvent.setText(myString);
    }
}

코드 설명

  • onSaveInstanceState(): 액티비티가 소멸되기 전에 호출되며, Bundle 객체에 문자열 데이터를 key-value 형태로 저장합니다.
  • onRestoreInstanceState(): 액티비티가 재생성될 때 호출되며, 저장된 Bundle에서 데이터를 꺼내 TextView에 다시 설정합니다.

4단계: 앱 실행 및 결과 확인

실제 Android 기기를 컴퓨터에 연결한 상태에서 앱을 실행해 보겠습니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤 툴바의 Run 아이콘을 클릭하세요. 실행 옵션에서 자신의 모바일 기기를 선택하면, 기본 화면이 기기에 표시됩니다.

이제 화면을 회전해 보세요. 액티비티가 소멸 후 재생성되더라도 저장된 인스턴스 상태 덕분에 "Welcome back to Android"라는 텍스트가 그대로 화면에 나타나는 것을 확인할 수 있습니다.