안드로이드와 액티비티에는 생명주기라는 것이 존재한다.
https://blog.naver.com/getinthere/221695412324
안드로이드는 컴퓨터와 다르게 한 프로세스만 동작한다.
따라서, 우리가 화면을 내리게 되면 앱은 중지된다.
onCreate() | - 액티비티 처음 만들어질 때 호출 - 화면에 보이는 뷰들의 일반적인 상태 설정 - 이전 상태가 저장되어 있는 경우에는 번들 객체를 참조하여 이전상태 복원 가능 -이 매서드 다음에는 항상 onStart()매서드 호출 |
onStart() | - 액티비티가 화면에 보이기 바로 전에 호출 - 액티비티가 화면 상에 보이면 이 매서드 다음에 onResume() 매서드 호출 - 액티비티가 화면에서 가려지게 되면 이 매서드 다음 onStop() 매서드 호출 |
onResume() | - 액티비티가 사용자와 상호작용하기 바로 전에 호출됨 |
onRestart() | - 액티비티가 중지된 이후에 호출되는 메서드로 다시 시작되기 전에 호출됨 - 이 매서드 다음에는 항상 onStart() 매서드 호출 |
onPause() | - 또 다른 액티비티를 시작하려고 할 때 호출 - 저장되지 안은 데이터를 저장소에 저장하거나 애니메이션 중인 작업을 중지하는 등의 기능 수행 |
onStop() | - 액티비티가 사용자에게 더 이상 보이지 않을 때 호출됨 - 액티비티가 소멸되거나 또 다른 액티비티가 화면을 가릴 때 호출 - 액티비티가 이 상태면 강제 종료 가능 |
onDestroy() | - 액티비티가 소멸되어 없어지기 전에 호출 - 이 매서드는 액티비티가 받는 마지막 호출 - 액티비티가 앱에 의해 종료되거나 시스템이 강제로 종료되는 경우 호출 - 위의 두 가지 경우를 구분할 때 isFinishing() 매서드 활용 - 액티비티가 이 상태에 들어가면 시스템은 액티비티를 강제 종료할 수 있음. |
예시 코드
package com.mary.lifecycleex01;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "Main_Activity";
private String downloadData="";
private String currentState="";
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
currentState="에너지 50";
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
Log.d(TAG, "onResume: 현재 에너지 : "+currentState);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
SharedPreferences pref=getSharedPreferences("prefer", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor= pref.edit();
editor.putString("currentState",currentState);
editor.commit();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences pref=getSharedPreferences("prefer", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor= pref.edit();
currentState=pref.getString("currentState","");
Log.d(TAG, "onCreate: "+currentState);
//다운로드 시작
new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i=1; i<4; i++) {
Thread.sleep(1000);
Log.d(TAG, "run: "+i+"초");
}
downloadData="다운 받은 데이터";
Log.d(TAG, "run: 다운로드 종료");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
Log.d(TAG, "onCreate: ");
}
}
반응형
'Android' 카테고리의 다른 글
안드로이드 스튜디오, JAVA]Material Design Navigation View에서, onNavigationItemSelected가 인식되지 않을 때 (0) | 2020.07.22 |
---|---|
Android Studio, JAVA] Result (0) | 2020.07.21 |
Android Studio, java] 액티비티 변경하기, 데이터 이동하기 (0) | 2020.07.21 |
안드로이드 스튜디오,java]Bottom Navigation 구현 (0) | 2020.07.16 |
안드로이드 스튜디오, java]프레그먼트, 탭, 메뉴 구성 응용 (0) | 2020.07.16 |