-
[안드로이드] 화면 회전시 데이터 유지하기Android/공부 2020. 6. 23. 17:14
LifeCycle과 SaveInstanceState에 관한 예제
-
LifeCycle이란 한글로는 생명주기를 의미한다. 안드로이드 스튜디오는 6가지의 콜백 함수로 관리된다.
-
화면을 회전시키면 액티비티가 지워지고 다시 만들어지는데, 이때 액티비티에 입력했던 정보가 모두 날아가게 된다. 매개변수 saveInstanceState에 이전 액티비티 상황을 Bundle 형태로 저장했다가 onCreate() 함수에 돌려받으면 화면 회전시에도 데이터를 유지하도록 만들 수 있다.
1. xml
1. activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical" android:padding="4dp"> <TextView android:id="@+id/level" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="레벨 : 0"/> <Button android:id="@+id/btn_levelup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="레벨 증가" android:onClick="onLevelup"/> <TextView android:id="@+id/score" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="점수 : 0"/> <Button android:id="@+id/btn_scoreup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="점수 증가" android:onClick="onScoreup"/> </LinearLayout>
2. java
1. MainActivity.java
package com.example.mylifecycleex; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.PersistableBundle; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends AppCompatActivity { public static final String STATE_LEVEL = "playLevel"; public static final String STATE_SCORE = "playerScore"; TextView level, score; int mLevel=0, mScore=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); level = (TextView) findViewById(R.id.level); score = (TextView) findViewById(R.id.score); // 상태 저장 if(savedInstanceState==null) { } else { mLevel = savedInstanceState.getInt(STATE_LEVEL); mScore = savedInstanceState.getInt(STATE_SCORE); level.setText(mLevel); score.setText(mScore); } }
@Override public void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); outState.putInt(STATE_LEVEL, mLevel); outState.putInt(STATE_SCORE, mScore); } public void onLevelup(View view) { mLevel++; level.setText("레벨 : " + mLevel); } public void onScoreup(View view) { mScore+=100; score.setText("점수 : " + mScore); } }
-
onSaveInstanceState는 Bundle에 저장되어야 할 상태 데이터를 저장한다. 이 객체는 액티비티가 재시작될 때, onCreate()와 onRestoreInstanceState()에 전달된다.
-
STATE_LEVEL, STATE_SCORE를 통해 level과 score 데이터가 저장되었다.
3. 결과화면
▼ 세로화면
▼ 화면을 가로로 회전시켰을때 화면
'Android > 공부' 카테고리의 다른 글
[안드로이드] Fragment 프래그먼트 예제 (0) 2020.06.26 [안드로이드] Fragment 프래그먼트 (0) 2020.06.23 [안드로이드] 데이터 저장하기 2 (0) 2020.06.22 [안드로이드] 데이터 저장하기 (0) 2020.06.22 [안드로이드] CustomView 예제 2 (0) 2020.05.26 -