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