[Android] activity 생명주기

devguri·2022년 4월 15일
0
post-thumbnail

Activity

  • 이러한거 쓰는 이유 : onCreate()에만 작성하면 만약 팔로우들이 있는데 어떤애가 언팔하면 그 화면을 나는 볼 수가 없다. 그래서 onResume에서 새로고침하는 코드를 만들어야 하는 것

Activity에 대해

화면에는 하나의 activity만 구성된다. 그 activity가 실행되고 다른 activity로 변경이 가능하다. activity가의 수명주기를 통해 어떤 방식으로 실행되고 종료되는지 알아야한다.

명시적 요철과 암시적 요청 기반으로 기능을 제공한다.

명시적 요청 : 카카오톡 앱에서 친구화면으로 활동 시작하도록 지시

암시적 요청 : 사용자에게 작업 실행할 때 어떤 앱 사용할지 묻는 메시지 표시하도록 앱 설정

<activity android:name=".StartActivity" android:icon="@drawable/app_icon">
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
  • 다른 앱이 앱 활동을 활성화하지 못하게 하려면 다른 인텐트 필터는 필요하지 않다.

Activity 생명주기

onCreate()

모든 activity가 생성될 때 가장 먼저 실행되는 것이다.

데이터 목록에 바인딩하고 activity를 ViewModel과 연결한다.

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

✔️ savedInstanceState라는 변수에 이전 엑티비티의 상태를 저장해둔 Bundle객체를 저장하여 실행

onStart()

activity가 사용자에게 표시되고 엑티비티를 준비하는 작업

매우 빠르게 진행되므로, 오래 머무르지 않는다.

이 callback이 끝나고, activitiy는 onResume()을 호출한다.

onResume()

activity가 실행하고 있는 상태이며, 사용자들과 상호작용 하는 상태이다.

다음 app이 실행될 때까지 이상태를 유지한다.

  • ex) 프레그먼트에서 다른 프레그먼트 띄울 때, 사용하는경우가 많음

onPause()

activity를 떠나면 가장 먼저 호출됨

activity가 일시중지 상태이고 잠시 후 다시 시작할 작업에 대해서 조정한다.

onPause()는 아주 잠깐 실행되므로 저장 작업 실행하기는 시간이 부족 (사용자 데이터 저장, 네트워크 호출, 데이터베이스 트랜잭션 실행 안됨)

onStop()

activity가 사용자에게 표시 되지 않을 때 콜백 호출함

CPU를 많이 소모하는 종료작업 주로 실행함

onDestroy()

활동이 소멸되기 전에 호출됨

  • 데이터바인딩 : 데이터와 뷰의 조합
  • publish view observer 패턴

직접 실행해보고 생명주기 공부하기

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySignInBinding.inflate(layoutInflater)
        setContentView(binding.root)

        Log.d("onCreate","start")
}

override fun onStart() {
        super.onStart()
        Log.d("onStart","start")
    }

    override fun onResume() {
        super.onResume()
        Log.d("onResume","start")
    }

    override fun onPause() {
        super.onPause()
        Log.d("onPause","start")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d("onDestroy","start")
    }
  • 로그인 엑티비티에만 생명주기 함수 넣어주고 Log 찍어서 확인하기
  • 현재 로그인 페이지와 회원가입 페이지로 구성됨 그에 따른 생명주기를 Log로 확인해보기

앱을 실행하는 경우

<로그인 Activity>

onCreate -> onStart -> onResume

다른 엑티비티로 이동한 경우

<회원가입 Activity>

-> 회원가입 Activity로 이동

onPause -> onStop
이전 엑티비티 잠시 일시중지 -> 작업 중단

회원가입 후 회원가입 완료 버튼 클릭하여 로그인창으로 이동

onPause -> onStop -> onStart -> onResume
  • 회원가입 창 pause -> stop
  • 로그인 엑티비티 start -> resume

회원가입 activity에서 뒤로 가기 버튼 클릭해서 다시 로그인 activity로 이동하는 경우

onStart -> onResume
  • 회원가입 activity 꺼짐 (Log로그인에만 해서 pause,stop안나옴) -> 로그인 activity start -> 로그인 activity resume

로그인 엑티비티를 끄는 경우

onPause-> onStop -> onDestroy

엑티비티 중지 후 파괴

로그인 엑티비티 파괴된거 다시 실행시키기

onCreate-> onStart -> onResume
  • 다시 실행해서 onCreate() 부터 실행함

로그인 엑티비티 잠시 중지시키고 다른 화면으로 이동한 경우


-> 가운데 버튼 눌러서 잠시 activity 중지

onPause -> onStop

-> 위에 뒤로가기처럼 화면을 종료시킨 것은 아니기 때문에 onDestroy를 실행시키지는 않는다.

  • onPause -> 로그인 엑티비티가 포그라운드에 있지 않기 때문에 잠시 일시중지
  • onStop -> 앱이 사용자에게 보이지 않는 동안 필요하지 않은 리소스 중지시킴

생명주기에 대해서 자세하게 다뤄야할 것 같아서 로그를 찍어 이해해보았다. 글로 읽는 것보다 확실히 이해가 잡힌듯 하다.

profile
Always live diligently

0개의 댓글