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