×
Crocus
공부한 내용을 정리하는 블로그로 시작한
Crocus는 2014년 1월 14일 부터 시작하여
현재 월 6만명, 총 1,500,461명의 방문자 수를 기록하고 있습니다.
Donation
이제 많은 사용자들이 이용하는 만큼
더 다양한 서비스 개발/제공을 위해 후원금을 모금하고자 합니다.
후원을 해주시는 분들은 Donators 명단에 성명, 후원금을 기입해드리며
Crocus 블로그가 아닌 다른 곳에 정리해둔 저만의 내용을 공유해 드리고자 합니다.
Account
예금주 : 고관우
신한은행 : 110-334-866541
카카오뱅크 : 3333-01-7888060

👉 후원 페이지 바로가기 Donators
익명 : 5000원(Crocus응원합니다.)
busyhuman: 5000원(유용한 지식 감사합니다.)
익명 : 5000원(알고리즘 학습러)

안드로이드 코딩을 하는 도중에 화면 회전 등등 다양한 순간에 activity의 focus를 놓치게 되면 onPause -> onStop -> onDestory가 호출되며 데이터가 유실되는 경우가 있다.

 

이때 데이터를 보존해야하는 것이 있다면 아래와 같이 코딩을 하자.

 

 

MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView mTextView;
    private int mNumber;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = findViewById(R.id.text_view);
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mNumber += 1;
                mTextView.setText(mNumber+"");
            }
        });

        // bundle에 저장되어 있는 데이터 가져오기
       if(savedInstanceState != null)
        {
            mNumber = savedInstanceState.getInt("number");
            mTextView.setText(mNumber+"");
        }
    }

    // onPause 직전에 호출되는 부분, Bundle에 상태를 저장 할 수 있다.
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        outState.putInt("number", mNumber);
    }
 }

 위의 코드와 같이 onPause 직전에 onSaveInstanceState를 호출하게 되는데 이때

저장이 필요한 데이터를 Bundle에 담아주면 된다.

 

다시 onCreate 상태로 돌아올 때 savedInstanceState에 해당 데이터들이 존재하게 된다.

activity_main.java

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center">
        <TextView
            android:id="@+id/text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="0"
            android:gravity="center"/>
        <Button
            android:id="@+id/btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="plus"/>
    </LinearLayout>
</LinearLayout>