반응형
    
    
    
  안드로이드 코딩을 하는 도중에 화면 회전 등등 다양한 순간에 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>


반응형
    
    
    
  'Basic > Android' 카테고리의 다른 글
| ValueAnimator을 이용한 애니메이션 만들기 (0) | 2020.03.21 | 
|---|---|
| 안드로이드 JSON parse 하는 방법 (0) | 2020.02.16 | 
| Android AsyncTask 동작 원리 (0) | 2020.01.25 | 
| setOnTouchListener called on it but does not override performClick 에러 해결 (0) | 2020.01.19 | 
| [Android] kvm permission denied 해결 방법 (1) | 2020.01.17 |