출처: http://baiduhix.blogspot.com.br/2015/08/android-how-to-do-findviewbyid-in.html
★ http://www.vogella.com/tutorials/AndroidLifeCycle/article.html
- Activity and Fragment Lifecycle
- Activity Lifecycle (출처: http://philosymbol.net/?p=571) 
 : 안드로이드 어플리케이션은 자신의 프로세스 수명을 직접 제어하지 않으며, 안드로이드 런타임이 각 어플리케이션의 프로세스와 그 안에 있는 각 activity를 관리한다.
 : 런타임이 프로세스와 activity의 종료와 관리를 다루는 동안, activity의 상태는 자신의 부모 어플리케이션 프로세스의 우선순위를 결정하는데 사용된다.
 : 어플리케이션 우선순위는 런타임이 어플리케이션과 그 안에 실행중인 activity를 종료시킬 가능성에 영향을 미치게된다.
 - 활성(Active)
 : activity가 stack의 최상위에 있을 경우 이 activity는 현재 화면에 보이고 사용자 입력을 받는다.
 : 안드로이드는 무슨 일이 있어도 활성 상태에 있는 activity가 살아있도록 노력하며, 이 activity가 필요로 하는 리소스를 확보하기 위해 필요에 따라 stack의 아래쪽에 있는 activity들을 종료시킬 수 있다.
 : 다른 activity가 활성화되면 기존의 활성 activity는 일시 중지(Pause)된다.
 - 일시 중지(Active)
 : 경우에 따라 activity는 화면에는 보이지만 포커스를 지니지 않을 수 있다.
 : 이 상태는 투명한 activity나 화면 전체를 사용하지 않는 activity가 그 앞에 활성화되어 있는 경우이다.
 : 일시 중지 상태가 되는 경우 activity는 활성 상태인것처럼 다뤄지지만 사용자 입력을 받지 않는다.
 : 극단적인 경우, 안드로이드는 활성 activity를 위한 리소스 확보를 위해 일시 중지 상태의 activity를 종료시킬 수 있을 것이다.
 : 만약 activity가 완전히 가려지게 되면 그 activity는 중지상태가 된다.
 - 중지(Stop)
 : activity는 화면에 보이지 않는다.
 : 이 activity는 모든 상태 및 멤버 정보를 메모리에 남기지만, 만약 시스템이 활성 activity를 위해 메모리를 요청할 경우 리소스 확보를 위한 정리 후보 1순위가 된다.
 : activity가 중지될 때는 데이터와 현재 UI상태를 저장하는 것이 중요하다.
 : activity가 화면 밖으로 나가거나 닫히고 나면 그 activity는 비활성 상태가 된다.
 - 비활성(Inactive)
 : activity는 종료되고 난 이후와 시작되기 이전 비활성 상태에 머문다.
 : 비활성 activity는 activity stack에게 제거되며, 화면에 다시 나타내기 위해서는 재시작되어야 한다.
 - Activity 생명주기를 구성하는 메소드- 메소드 - 설명 - onCreate - 액티비티가 최초 생성시에 호출된다. 초기화 설정을 하는 곳으로 보관된 상태의 액티비티가 있다면, 그 상태를 저장중인 Bundle 객체를 받는다. onStart() 메소드가 이어진다. 강제종료가 불가능하다. - onRestart - 액티비티가 정지 후 다시 시작되기 바로 직전에 호출된다. 
 onStart() 메소드가 이어진다. 강제종료가 불가능하다.- onStart - 액티비티가 사용자에게 보여지기 직전에 호출된다. 액티비티가 보여지게되면 onResume() 메소드가, 안보이게 되면 onStop() 메소드가 이어진다. 강제종료가 불가능하다. - onResume - 액티비티가 사용자와 상호작용하기 직전에 호출된다. (스택의 최상위에 위치) onPause() 메소드가 이어진다. 강제종료가 불가능하다. - onPause - 시스템이 다른 액티비티를 시작하려 할 때 호출된다. 일반적으로 데이터 저장을 하기에 좋은 곳이다. 소스코드의 속도가 빨라야 한다. 왜냐하면 이 메소드가 끝나기 전까지 다음 액티비티가 실행되지 않기 때문인데 액티비티가 되돌아오면 onResume(), 보이지않게되면 onStop()이 이어진다. 강제종료가 불가능하다. - onStop - 액티비티가 사용자에게 보이지 않을때 호출 된다. 액티비티가 제거되거나 다른 액티비티가 실행되어 해당 액티비티를 덮어버렸을때, 호출된다. 
 액티비티가 되돌아오면 onRestart(), 액티비티가 사라지면 onDestroy() 가 이어진다. 강제종료가 가능하다.- onDestroy - 액티비티 삭제 직전에 호출된다. 액티비티가 받는 마지막 호출 메소드로 시스템이 메모리 확보를 위해 액티비티 인스턴스를 없애버리거나, finish() 메소드가 호출되면 호출되는 메소드이다. 
 isFinishing() 메소드로 두 가지를 분기할 수 있다. onStart() 메소드가 이어진다. 강제종료가 불가능하다.
 - Activity 상태 저장 (출처: http://namsieon.com/286)
 시스템이 액티비티를 강제종료 했을때, 사용자는 이전의 액티비티로 돌아가고 싶을 수 있습니다. 이럴 경우 액티비티가 강제종료 되기 전에 상태를 저장할 수 있는 onSaveInstanceState() 메소드를 구현하면 저장이 가능해 집니다.
 즉, 액티비티가 파괴되기전에 호출되는 메소드 인데요. ( onPause() 호출 이전에 호출됩니다. )
 이 메소드는 이름/값 쌍으로 이루어진 번들 객체(Bundle) 를 인수로 가집니다. 액티비티가 다시 시작되면 번들은 onSaveInstanceState() 와 onStart() 이후에 호출되는 onRestoreInstanceState() 에게 전달됩니다.
 ☞ onSaveInstanceState() , onRestoreInstanceState() 메소드는 생명주기 메소드는 아닙니다.
 따라서 항상 호출되지는 않으며 특정 상황 ( 액티비티 강제종료전에 onSaveInstance() 호출처럼 ) 에서만 호출됩니다. 단, 사용자 액션에 의해 종료될 때는 ( 사용자가 직접종료 ) 호출되지 않습니다.
 - 사용자가 되돌아가지 않을 생각으로 종료한 것으로 판단한 것이겠죠...
 onSaveInstanceState() 는 액티비티의 일시적인 상태 저장을 위한 것이므로 , 데이터 등을 안전하게 저장하려면 onPause() 메소드에서 처리해야 합니다.
- Fragment
'Programing > Android' 카테고리의 다른 글
| Google I/O - Memory Management For Android (0) | 2016.05.03 | 
|---|---|
| Avoiding Memory Leaks (0) | 2016.05.03 | 
| Handler, Looper (0) | 2016.04.19 | 
| Parcelable vs. Serializable (0) | 2016.03.22 | 
| 안드로이드 - 자바 시스템 프레임워크 (0) | 2016.01.26 | 
















