반응형
https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko
https://codechacha.com/ko/android-shared-preferences/
MainActivity
package com.example.a27_samplelifecycle;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("main : onCreate");
}
@Override
protected void onStart() {
super.onStart();
System.out.println("main : onStart");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("main : onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("main : onDestroy");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("main : onPause");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("main : onResume");
}
}
화면에 보일 때는 onCreate, onStart, onResume 순서로 호출되고, 시스템 [back] 버튼을 눌러 화면을 없앨 때는 onPause, onStop, onDestroy 순서로 호출된다
화면이 전환될 때는 onDestroy가 호출 되지 않는다
서브 액티비티가 화면에 보이는 시점에 메인 액티비티는 화면 뒤쪽에 숨어있는 것과 같은 상태가 되고(실제로는 액티비티 스택으로 들어감), 서브 액티비티가 사라지면 다시 onResume 메소드가 호출되면서 화면에 보이게 된다
onResume과 onPause는 화면이 보일 때와 화면이 보이지 않을 때 항상 호출된다
앱이 갑자기 중지되거나 또는 다시 화면에 나타날 때 앱 데이터의 저장과 복원이 필요하기 때문이다
게임을 할 때 사용자의 점수가 갑자기 사라지지 않도록 하려면 onPause 메소드 안에서 데이터를 저장하고 onResume 메소드 안에서 복원해야 한다
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/nameInput"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="152dp"
android:ems="10"
android:hint="name"
android:inputType="textPersonName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity
package com.example.a27_samplelifecycle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
EditText nameInput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameInput = findViewById(R.id.nameInput);
System.out.println("main : onCreate");
}
@Override
protected void onStart() {
super.onStart();
System.out.println("main : onStart");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("main : onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("main : onDestroy");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("main : onPause");
saveState();
}
@Override
protected void onResume() {
super.onResume();
System.out.println("main : onResume");
restoreState();
}
protected void restoreState() {
SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE);
if ((pref != null) && (pref.contains("name"))) {
// 2번째 인자는 기본 값으로, key에 대한 데이터가 없을 때 이 값이 리턴
String name = pref.getString("name", "");
nameInput.setText(name);
}
}
protected void saveState() {
SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("name", nameInput.getText().toString());
editor.commit();
}
protected void clearState() {
SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.clear();
editor.commit();
}
}
반응형
'안드로이드' 카테고리의 다른 글
한 화면에 2개의 프래그먼트 (0) | 2021.10.19 |
---|---|
프래그먼트 (0) | 2021.10.18 |
태스크 관리 (0) | 2021.10.14 |
Paracelable 다른 참고 자료 (0) | 2021.10.14 |
데이터 전달, Parcelable (0) | 2021.10.14 |