[Android SDK] [Android] Activity 생명주기와 이동

post-thumbnail

 

 

???? Activity란?

안드로이드에서 화면(UI) 구성의 가장 기본 요소는 Activity이다.
앱에서 위젯(Button, ImageView)을 표시하기 위해서는 최소한 한개 이상의 Activity를 가져야 한다.

즉, App에서 보이는 화면 하나하나가 Activity라고 생각하면 된다.
Activity가 화면에 보여지는지 안보여지는지에 따라서 상태가 변한다.

???? Activity의 생명주기

Activity는 메모리에 데이터가 쌓이는 '스택' 구조로 화면에 보여진다. 메모리에 쌓이고, 소멸되기 까지의 생명주기를 가지고 있다.
위 그림을 통해 알 수 있듯이 Activity가 생성되고 종료 되기 까지 상태에 따라 시스템은 각 콜백을 호출한다.

◾ 1. onCreate() - 필수 구현 항목

  • Activity가 생성될 때 호출
  • 사용자 인터페이스 초기화에 사용됨
  • 실행 완료 시 onStart() / onResume()을 호출
  • 다시 불려질 수 없음(비정상으로 종료 후 재시작의 경우 제외)

    Activity를 만들 때 단 한번만 하면 되는 작업들

◾ 2. onRestart()

  • Activity가 멈췄다 다시 시작되기 전 호출

◾ 3. onStart()

  • Activity가 화면에 보여지기 직전 호출
  • 활동이 '재개됨' 상태가 됨
  • 실행 완료 시 onResume() 호출

◾ 4. onResume()

  • Activity가 사용자와 상호작용을 하게 됐을 때 호출
  • 전화가 오거나, 다른 Activity로 이동하거나, 기기 화면이 꺼지는 등으로 앱에서 포커스가 끌날 때까지 이 상태에 머무름
  • 다시 App으로 돌아올때 무조건 호출됨

    Activity가 다시 호출될 떄 하면 되는 작업들

◾ 5. onPause()

  • 화면의 일부분이 보여지지 않는 상태에 호출
  • 데이터 저장, 네트워크 호출 등의 처리를 해서는 안됨
    : 아주 잠깐 실행되기 때문에 완료되지 못할 수 있어서!
  • Activity가 다시 시작되면 onResume() 호출, 완전히 중지 시 onStop() 호출

◾ 6. onStop()

  • Activity가 더이상 사용되지 않을 때 호출(화면 전부가 보이지 않을 때)
  • 주의할 점은 메모리 부족 시 호출 되지 않을 수 있음
  • 부하가 큰 종료작업은 여기서 실행해야함 (ex. DB저장)
  • Activity 실행 종료 시 onDestroy() 호출

개발자분께서 말씀하시길 onPause()와 onStop()을 확실하게 구분짓기는 어렵기 때문에 나눠서 구현하지 않고 그냥 한곳에다가 구현한다더랑

◾ 7. onDestroy()

  • Activity가 완전히 끝났을 때 호출
  • finish() 호출 또는 Activity 제거 시 호출

???? 미니 실습

위의 6가지 함수가 각각 실행되는 경우 로그를 찍도록 작성해봤다.
에뮬레이터를 통해 간단하게 실습(?)을 해봤다.

App이 시작될 때: onCreate(), onStart(), onResum()이 차례대로 실행

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

App이 일부 보이지 않게 되었을 때 : onPause() 와 onStop() 차례대로 실행

App이 다시 보여지게 되었을 때 : onStart() 와 onResume() 차례대로 실행

APP을 완전히 종료했을 때 : onDestroy()


???? 갑분TMI! Activity 간 이동

새로운 Activity를 시작할때, Activity에서 결과를 받을지에 따라 startActivity() 또는 startActivityForResult()를 사용한다.
두가지 모두 Intent 객체를 전달해야한다.

- startActivity() - 결과를 받지 않음

val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)

- startActivityForResult() - 결과를 받음

  1. FirstActivity에서 btn 클릭시 SecondActivity로 이동
btn.setOnClickListener {
      val intent = Intent(this, SecondActivity:: class.java)
      startActivityForResult(intent, 100);
}
  1. SecondActivity에서 btn_2 클릭 시 종료 후 FirstActivity로 이동
btn_2.setOnClickListener {
            val intent = Intent()
            intent.putExtra("message", "안녕 나는 두번째 액티비티야!")
            setResult(Activity.RESULT_OK, intent)
            finish()
        }
  1. FirstActivity로 돌아오면서 받아온 message 출력
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK) {
            when (requestCode) {
                100 -> {
                	Toast.makeText(this, data!!.getStringExtra("message").toString(), Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

출처 : 안드로이드 공식 문서 - Fragments && 이미지 출처

[출처] https://velog.io/@jinny_0422/Activity-%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0%EC%99%80-%EC%9D%B4%EB%8F%99

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
153 [Android Studio] Google Play Console - 앱 API 수준 업데이트하기 (앱 업데이트 출시, 앱 API 수준 이상 타겟팅 방법, API 31 To 33) file 졸리운_곰 2024.08.28 203
152 [android studio] 안드로이드 앱 배포, APK와 AAB file 졸리운_곰 2024.05.03 208
151 [Android SDK] [안드로이드] 접속된 네트워크 인터페이스의 IP 주소 가져오기 졸리운_곰 2024.05.02 191
150 [Android SDK] [안드로이드] 핸드폰 번호, 기기 고유 id 등 단말기 정보 가져오기 file 졸리운_곰 2024.05.02 451
149 [Android SDK] Android) 안드로이드 Jsoup로 웹크롤링 하기 (예제포함) - "데일리 브리핑 앱 개발기" file 졸리운_곰 2024.05.01 137
» [Android SDK] [Android] Activity 생명주기와 이동 file 졸리운_곰 2024.05.01 182
147 [Android SDK] [Android] EditText 읽기 전용으로 만들기 졸리운_곰 2024.05.01 120
146 [Android SDK] 안드로이드: 간단한 데이터를 저장하고 싶을 때(SharedPreferences 사용예제) 졸리운_곰 2024.05.01 145
145 [Android SDK] [Android] Jsoup 으로 파싱하기 file 졸리운_곰 2024.05.01 146
144 [Android SDK] [Android] 안드로이드 - 액티비티(Activity)로부터 결과 데이터 받아오기 file 졸리운_곰 2024.05.01 166
143 [Android SDK] [안드로이드/Android] 기기 네트워크 연결 상태 확인 file 졸리운_곰 2024.05.01 138
142 [Android SDK] 안드로이드 - 메시징 - Toast 졸리운_곰 2024.05.01 201
141 [Android SDK] [Android] 안드로이드 Alert 창 띄우기 file 졸리운_곰 2024.05.01 170
140 [Android SDK] 버튼을 클릭하면, 동작하는 코드를 작성하는 방법 졸리운_곰 2024.05.01 120
139 [Android SDK] [ Android ] a webview method was called on thread 'javabridge' 에러가 발생했을 때 졸리운_곰 2024.05.01 202
138 [Android SDK] [안드로이드] Thread, TimerTask, Handler 반복 호출 만들기 JAVA 졸리운_곰 2024.05.01 157
137 [Android SDK] [Android] postDelayed()를 이용해서 주기적 메소드 실행 졸리운_곰 2024.05.01 144
136 [Android SDK] Making Android WebView autorefresh periodically 졸리운_곰 2024.05.01 168
135 [Android SDK] [안드로이드] 시스템 멈추기 - Sleep() 사용법 file 졸리운_곰 2024.05.01 140
134 [Android SDK] 안드로이드 스레드 예제. 스레드로 고민해보기. (Android Thread UseCase) file 졸리운_곰 2024.05.01 142
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED