[1주차/필수 과제] 생명 주기 측면에서 어떤 것을 고려해야 할까요? #2
Replies: 28 comments
-
Activity의 생명주기는 총 7개의 콜백으로 나눠져 있다고 하죠.
자원을 할당하고 해제하는 시점을 정할 때 여러 단계로 나눠진 생명주기를 잘 고려해야 합니다. 잘못하면 동일한 클래스의 객체가 여럿 생성되어 메모리가 낭비되는 상황이 발생할 수도 있다고 생각해요,, 실제로 예전에 카카오맵 api를 사용했을 때, 하나의 액티비티에 여러 개의 지도 객체가 동시에 생성되어 오류가 발생했던 적이 있었어요. 생명주기에 대한 이해가 없을 때라 대충 onResume에서 생성하고 onDestroy에서 해제해서 생긴 문제였는데, 해제하는 부분을 onStop으로 옮겨서 해결했던걸로 기억합니다! |
Beta Was this translation helpful? Give feedback.
-
https://developer.android.com/guide/components/activities/activity-lifecycle?hl=ko 와 https://velog.io/@akcineg/안드로이드-액티비티-생명주기를-정확하게-이해하자 을 읽고 복습해 보았습니다. |
Beta Was this translation helpful? Give feedback.
-
생명주기는 잘 활용한다면 불필요한 리소스 낭비를 줄이고 성능을 높일 수 있지만 내가 원하는 기능이 정확하게 어떤 생명주기에 위치해야 하는지 잘 생각하지 않으면 오히려 기능이 제대로 돌아가지 않는 일이 생길 수 있어요 저는 생명주기를 활용해서 룸디비에 데이터를 저장해본 경험이 있는데요! 액티비티를 떠날 때 데이터를 저장하는 로직이라 onPause()에서 데이터를 저장하는 기능을 구현했습니다 그때는 onResume() -> onPuase 순서로 실행되고, onPause()가 사용자가 액티비티를 떠날 때 실행되는 첫 번째 콜백이라 적절하다고 생각했었어요 그런데 자꾸만 저장이 제대로 안되는 문제가 생겼습니다. 원인은 저장이 완전히 종료되기 전에 onPause() 메소드가 종료되었기 때문이었어요!! 세미나 때도 언급되었는데 onPause()는 아주 잠깐 실행되기 때문에 저장작업에는 적절하지 못합니다... 당시에는 잘 모르겠어서 그냥 onCreate()에 다 구현했는데 프로젝트가 끝나고 다시 한번 복습해보니 onStop()에서 실행하면 더 좋았을 것 같다는 생각을 했답니다😅 |
Beta Was this translation helpful? Give feedback.
-
리소스 관리와 데이터 저장, 상태유지, 그리고 성능 최적화를 고려해야한다고 생각합니다. 저는 생명 주기를 생각하지 못해 오류를 겪었던 적이 있습니다. 기기를 회전하였을 때, UI 상태를 저장하지 못해서 회전하지 않았을 때와 회전했을 때의 UI가 변경되는 현상을 발견했습니다. 그때 생명 주기에 대해 공부하게 되어 onSaveInstanceState()를 통해 상태를 저장하고, onRestoreInstanceState()를 통해 상태를 복원하며 문제를 해결했었습니다. 이 과정을 통해 생명 주기가 단순히 리소스 관리, 데이터 저장에만 중요한 개념이 아니라는 것을 깨닫고 생명 주기에 대하여 더 자세히 알아보게 되었던 것 같습니다! |
Beta Was this translation helpful? Give feedback.
-
[Activity의 생명 주기]
[개발 시 생명 주기 측면에서 고려해야 할 점] 하나의 앱은 보여지는 측면 뒤에 백그라운드 작업이 더 많을 것 같습니다. 이때 이 백그라운드 작업들을 적절한 생명주기에 배치시켜서 onStart()처럼 화면이 배치되기 직전에 백그라운드 작업을 선행하거나, onStop() 처럼 activity가 아예 가려질 경우 불필요한 백그라운드 작업을 중단하며 효율적인 구현을 할 수 있을 것 같습니다. [생명 주기를 고려해본 경험] 개발 시 생명 주기를 고려해본 적은 없습니다. 하지만 이번에 생명 주기에 대해 알게 되어 이때까지 앱 사용 경험들에서 생명 주기들이 어떻게 작용하는 지 생각해보게 되었습니다. 예시로 유튜브 영상 재생 시 폰 화면을 끄면 원래는 영상이 멈추는 데, 유튜브 프리미엄의 경우 영상이 멈추지 않고 소리가 나옵니다. 이 부분은 onPause()나 onStop()에 비디오를 중단하는 대신 Service 컴포넌트로 소리를 넘기는 작업을 한 것이라고 합니다. 이렇듯 실제 사용하는 앱들을 더 깊게 이해할 수 있게 되었고 이제 개발 시 생명주기를 고려해 보려고 합니다! |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
기본적인 Activity 생명주기Activity의 생명주기는 총 7개의 콜백을 가지고 있습니다.
onPause() 가 되었다가 다시 화면으로 돌아올 경우 onPause() ⇒ onResume() onStop() 가 되었다가 다시 화면으로 돌아올 경우 onRestart() ⇒ onStart() ⇒ onResume() 개발 시 생명 주기 측면에서 고려해야 할 점일단 리소스 관련해서 정확한 시기 예를 들어 onDestroy 쪽에 필요 없는 소켓통신 같은거는 잘 끊어줘야될 것 같습니다. 또한 위에 적은 앱이 백그라운드로 갈때 onDestroy 되지않고 onRestart 되는 경우에 다양한 부분에서 다양한 오류가 날 것으로 예상되기 때문에 클라이언트의 요구사항에 따라 그러한 부분을 생명 주기 측면에서 잘 고려해야될 것 같습니다. 생명 주기를 고려해본 경험안드로이드 개발을 해본 경험이 없기때문에 생명 주기를 고려해본 경험은 없지만, 추후에 다양한 분들에게 경험을 통한 조언을 구하고, 제가 직접 다양한 프로젝트를 진행해보면서 생명주기에 따라 어떠한 문제가 생기고, 어떤식으로 처리를 해야되는지 공부하고 정리하도록 하겠습니다. |
Beta Was this translation helpful? Give feedback.
-
Activity의 생명 주기는 총 7개로 다음과 같습니다.
어떤 것들을 고려하면 좋을지해당 view에 대한 리소스가 계속 남아있는 상태로 다른 뷰를 계속 그릴 수 있기 때문에생명 주기를 고려하는 것은 중요하다고 생각합니다. 회원가입 같은 경우, 한번 실행후에는 main 화면 진입 후에는 더 이상 필요 없기 때문에 이런 리소스를 줄여 앱을 가볍게 만들 수 있다고 생각하빈다. 생명 주기를 고려해본 경험프로젝트에서 생명 주기를 고려해본 경험이 있습니다. 위와 마찬가지로 회원가입 같은 화면은 한번 사용되고 사용되지 않기 때문에 고려했던 기억이 있습니다. 또한 서버에서 받은 데이터 호출 시, 해당 activity가 완료되면 이전 activity의 데이터를 업데이트 해야했던 경험이 있습니다. 이 경우, onResume 과 생명주기를 적절히 사용하여 데이터를 업데이트 시킨 기억이 있습니다. |
Beta Was this translation helpful? Give feedback.
-
Activity 생명주기
고려사항
적용경험안드로이드 전공 과목 과제를 수행할 때 사용자가 홈버튼을 눌러 앱을 백그라운드로 보내거나 종료했을때 onPause()나 onStop()이 실행됩니다. 이 때 관련 데이터들을 저장하도록 하여 데이터가 손실되지 않도록 했습니다. |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Activity 생명주기 단계
고려사항
적용 경험
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Activity 생명주기onCreate(): 액티비티가 시작될 때 레이아웃을 구성하면서 한 번 실행 onStart(): 액티비티가 사용자에게 보이기 직전에 실행. onResume(): 사용자가 액티비티와 상호작용하는 기능을 넣는 곳으로, 무조건 실행되어야 하는 기능이 들어감 onPause(): 포커스를 잃어 화면이 부분적으로는 보이지만 곧 사라질 때 실행 onStop(): 사용자에게서 화면이 완전히 사라지고, 다른 액티비티가 보여질 때 호출 onDestroy(): (화면회전 혹은)화면이 완전히 종료되기 직전에 호출 고려사항
개발해본 경험a activity에서 글들을 보여주고, b activity로 이동하여 에서 글을 작성한 후에 다시 a activity로 돌아왔을때, 새로 작성한 글이 보이지 않았습니다. |
Beta Was this translation helpful? Give feedback.
-
Activity의 생명 주기 (Activity Lifecycle)Activity는 앱에서 화면을 담당하는 중요한 요소. 이 Activity는 생성되고 종료되기까지 여러 단계를 거치면서 동작하고, 이 과정을 생명 주기라고 부름. 안정적인 앱을 만들려면 이 생명 주기를 잘 이해하는 게 필수임. 주요 생명 주기 단계:
고려해야 할 사항: 메모리 관리메모리 누수를 막는 게 정말 중요함. Activity가 종료되거나 화면에서 사라질 때 사용한 리소스나 메모리를 적절하게 해제하지 않으면 메모리 누수가 생길 수 있음. 특히 **onDestroy()**나 **onStop()**에서 사용하던 비동기 작업, 리스너, 애니메이션 등을 꼭 해제해야 함. 그래야 앱이 오래 실행되도 메모리 부족 문제를 피할 수 있음. |
Beta Was this translation helpful? Give feedback.
-
Activity 생명주기onCreate(): Activity가 시작(생성)될 때 호출되며, 전체 생명주기 동안 한 번만 수행 onStart(): Activity가 사용자에게 표시되기 직전에 호출, 이 때 상호작용은 불가 onResume(): Activity가 foreground에 표시되어 사용자와 상호작용이 가능 onPause(): Activity가 foreground에서 사라기 직전에 호출, 잠깐의 시간이기에 저장과 같은 작업은 onStop()에서 수행 onStop(): Activity가 완전히 foreground에서 사라질 때 호출, 이 때 리소스 해제 수행 onDestroy(): Activity가 소멸되기 전에 호출 고려해야 할 사항수행해야 할 작업을 생명주기에 맞게 적절히 배치해야 메모리 누수와 같은 문제가 생기지 않는다. 생명주기를 고려해본 경험특별히 고려해본 경험은 없던 것 같습니다..! 앞으로 신경써서 개발해보도록 하겠습니다ㅎㅎ |
Beta Was this translation helpful? Give feedback.
-
고려사항
개발 경험ViewPager에 스크롤 리스너를 등록했을 때 화면이 포그라운드 상태가 아닐 때 리스너를 해제하도록 설계하여 불필요한 메모리 점유를 줄이고자 했습니다. |
Beta Was this translation helpful? Give feedback.
-
Activity의 생명주기 고려할 점
개발경험 |
Beta Was this translation helpful? Give feedback.
-
Activity의 생명 주기 |
Beta Was this translation helpful? Give feedback.
-
생명주기onCreate(): Activity가 처음 생성될 때 호출됩니다. 초기화 작업을 수행하고, 화면 구성 요소들을 설정합니다. 데이터 초기화나 화면 로직을 설정하는 것이 주된 역할입니다. onStart(): Activity가 사용자에게 표시되기 직전에 호출됩니다. 사용자에게 보이기 전, 화면 구성이나 리소스 준비를 완료해야 합니다. onResume(): Activity가 재개되어 사용자와 상호작용할 준비가 되었을 때 호출됩니다. 이 시점에서 앱은 포커스와 인터랙션을 담당하게 됩니다. onPause(): 사용자가 다른 Activity로 이동하거나, 앱이 일부 가려질 때 호출됩니다. 빠르게 데이터를 저장하거나 필요한 작업을 마무리하는 단계입니다. onStop(): Activity가 완전히 사용자에게 보이지 않게 되면 호출됩니다. 리소스를 해제하거나 앱이 더 이상 필요하지 않은 데이터를 삭제하는 작업을 수행할 수 있습니다. onDestroy(): Activity가 완전히 소멸되기 전에 호출됩니다. 이 시점에서 모든 리소스를 해제하고, 종료 전 필요한 마무리 작업을 처리합니다. 고려사항비동기 작업이나 백그라운드에서 계속 실행되는 리스너는 onStop, onDestroy에서 해제하여 메모리 누수를 방지해야 합니다. 관련 경험아직 개발 경험은 없습니다. 앞으로 잘 고려하여 경험하고자 합니다. |
Beta Was this translation helpful? Give feedback.
-
Activity의 생명 주기 고려사항
개발경험 |
Beta Was this translation helpful? Give feedback.
-
1. Activity 생명 주기 단계 2. 생명 주기에서 고려할 사항 3. 경험 공유 |
Beta Was this translation helpful? Give feedback.
-
액티비티와 프래그먼트에 대해 공부한 내용을 노션에 정리해두었습니다. 액티비티는 생명 주기 전체 기간에 걸쳐 상태가 계속 변화합니다. 변화하는 상태에 맞춰 작업을 처리할 때 앱이 비정상적인 종료가 되거나, 계획한 리소스보다 많은 양을 잡아 먹어 제대로 동작하지 않는 일이 발생할 수 있으므로 각 상태마다 콜백 메소드를 통해 분리하여 작업해야 합니다. xml로 프로젝트를 진행할 때 onDestroy()에서 adapter를 해제하는 과정을 꼭 거쳤습니다. 어댑터가 제대로 해제되지 않아 리소스 낭비가 발생하는 상황을 방지하기 위함이었습니다. 컴포즈에서는 @composable 함수가 뷰가 그려지는 순서나 언제 컴포지션 되는지를 고려하여 개발해야 할 것 같습니다. |
Beta Was this translation helpful? Give feedback.
-
Activity의 생명주기
액티비티가 생성될 때 최초로 실행됨 단 한번만 수행되는 메소드
화면에 보여지기 시작하는 상태
화면에 나타나 있고 실행중인 상태
화면의 일부가 다른 액티비티에 가려짐 영구적은 data 저장
다른 액티비티의 실행으로 완전히 가려짐
액티비티 종료
onStop이 호출된 이후 다시 기존 activity로 돌아오는 경우에 호출되는 메소드 생명주기를 고려해서 개발해 본 경험 |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Activity 생명 주기
고려사항 및 주의할 점
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
Activity 생명 주기 (Lifecycle)
|
Beta Was this translation helpful? Give feedback.
-
🎤 토론 과제 - 생명 주기 측면에서 어떤 것을 고려해야 할까요?
세미나 때 안정성 있는 앱을 만들기 위해서는 생명 주기를 잘 고려하는 것이 필수적이라고 했던 거 기억 나시나요?
Activity의 생명 주기에 대해 다시 한 번 복습 후 정리해보고, 어떤 것들을 고려하면 좋을지 자신의 의견을 작성해 주세요. 또는, 생명주기를 고려해서 개발해본 경험이 있으신 분들은 그 경험에 대해 공유해주셔도 좋습니다.
Beta Was this translation helpful? Give feedback.
All reactions