Android Studio) 엑티비티 생명주기 및 제어

chaeyoung·2023년 1월 17일
0

Android Studio

목록 보기
7/13
post-thumbnail

액티비티 생명주기

  • 안드로이드 앱: 액티비티, 서비스, 콘텐츠 프로파이더, 브로드캐스트 리시버 등 4개 컴포넌트 조합으로 개발
    • 생명주기가 가장 복잡한 컴포넌트: 액티비티

생명주기

  • 상태가 변할 때 마다 생명주기 함수가 자동으로 호출된다
  • 액티비티 상태: 활성상태(activity running), 일시정지상태(pasue), 비활성상태(stop)
    • 활성상태: 현재 액티비티가 화면을 점유하고 출력되며, 사용자 이벤트 처리가 정상으로 처리된 상태
    • 일시정지상태: 현재 액티비티가 일시적으로 사용 불가능한 상태
    • 비활성상태: 현재 액티비티가 다른 액티비티로 인해 화면에서 완벽하게 가려진 상태

1) 활성상태

  • 생성된 액티비티: onCreate() -> onStart() -> onResume()함수 호출되면서 활성상태가 된다.

  • 활성 상태 = 사용자에게 액티비티 화면이 보임

  • onResume() 호출 전까지 액티비티 화면 내용 출력해야한다.

    &&& 포켓몬고 처럼 화면 위 포켓몬 출력하는 코드: addContentView()

     protected void onResume(){
        ...
        setContentView(R.layout.activity_main)
         ...
         addContentView(viewnane, params)
       }

2) 일시정지상태

  • onPause(): 일시정지상태가 되면 자동으로 호출됨
  • 다음에서 구현하기를 권장한다.
    • 애니메이션, CPU소비를 야기하는 기타 지속적인 작업정지
    • GPS와 같은 센서값 수신, 서버 네트워킹 등 엑티비티 일시 정지된 동안 불필요한 동작정지

  • 일시정지가 되어도 정상적으로 동작해야될 때: 애니메이션 의한 화면변화가 지속적 유지될 때
    • 대부분 onPause()가 필요, 리소스를 점유, 메모리 확보, 네트워킹 발생때문

3) 비활성상태

  • onPause() -> onStop(): 가렸던 화면 뒤로가기 버튼 등으로 조작 가능
    • = onRestart() -> onStart() -> onResume() 함수 호출됨

액티비티 상태 저장

  • 액티비티 종료되더라도 다시 실행될때 그대로 이용해야할 때가 있다.

  • 데이터 영속화와 관련, 앱 종료되었을 때 데이터를 유실하지 않고 저장했다 가져와야함(ex.회전)

    • 회전할때: onPause() -> onStop() -> onDestory() < 데이터가 유실된다 >

    • 데이터를 저장했다가 시작될 때 복원해주는 생명주기 함수들이 존재

      • onPause() -> onSaveInstanceState() -> onStop() -> onDestory() 호출 후 종료

      • 다시 액티비티 시작하면서: onCreate() -> onStart() -> onRestoreInsatanceState()
        -> onResume() 실행된다.

      • 데이터 저장, 복원에 사용 함수: onCreate(), onRestoreInstanceState(), onSaveInstanceState()

        • 데이터 종료 대비 미리 저장: onSaveInstanceState()`
    • 함수에서 데이터를 저장하는 방법: Bundle 사용

      • Bundle: 컴포넌트 데이터를 저장하기 위한 일종의 Map 객체(<key, value>로 저장됨)
      • 다시 시작하는 시점에서 onRestoreInstanceState() 사용해 가져온다.
    public void onSaveInstanceState(Bundle outState, //PersistableBundle outPersistentState){
    	super.onSaveInstanceState(outState, // outPersistentState);
        ...
    }      
    
    public void onRestoreInsatanceState(Bundle savedInstanceState, // PersistableBundle outPersistentState){
    	super.onRestoreInsatanceState(savedInstanceState, // outPersistentState);
        ...
    }
    • onSaveInstanceState, onRestoreInsatanceState 함수는 매개변수가 두개일 수도 있다.
      • onSaveInstanceState(): onPause() 호출 뒤 자동으로 호출되는 함수
      • onRestoreInsatanceState(): 액티비티 다시시작때 호출, 매개변수가 2개라면 Bundle에 저장된 데이터가 없으면 호출되지 않음

0개의 댓글