[안드로이드 인텐트]
1.명시적 인텐트
:클래스 이름으로 액티비티를 참조하여 특정 액티비티의 론칭(시작)을안드로이드 런타임에 요청
2.암시적 인텐트
:우리가 하길 원하는 작업(액션 타입)을 안드로이드 런타임에게 요청
[브로드 캐스트 인텐트]
:브로드 캐스트 수신자로 등록된 모든 애플리케이션에 전송되는 시스템 차원의 인텐트.
*브로드 캐스트 인텐트vs 일반적인 인텐트
:둘은 유사하게 동작하지만, 브로드캐스트 인텐트는 지정된 컴포넌트만 인텐트를 받는 것이 아니라 시스템의 여러 컴포넌트가 동시에 받는다.
[안드로이드 생명주기]
1.oncreate(bundle saveinstancestate)
:대부분 초기화 작업을 하는데 이상적인 곳,
메서드 인자로는 동적상태 정보를 포함할수 있는 bundle 객체가 전달된다.
그런 동적상태 정보는 직전에 생성되었다가 소멸된 동일 액티비티의 인스턴스로부터 전달되며 ,일반적으로 사용자 인터페이스의 상태와 관련되어있는 데이터 이다.
2.onrestart()
:액티비티가 런타임 시스템에 의해 이전에 중단 되었다가 막 다시 시작할 때 호출
3.onstart()
:onCreate()나 onRestart()메서드가 호출된후에 항상 바로 호출된다.
만일 액티비티가 액티비티 스택의 맨위로 이동하면 이메서드가 호출된 다음에는 onResume()이 호출될 것이다.그리고 곧 사용자인터페이스가 사ᅟᅭᆼ자에게 보이게 될것이라고 액티비티에게 알려준다.
4.onresume()
:액티비티가 액티비티의스택 맨위에 있으면서 사용자와 현재 상호동작하는 액티비티임을 알려준다.
5.onpause()
:이메서드 호출다음에는 onresume()이나 onstop()메서드 중 하나가 호출된다 .
이 메서드의 내부에서는 액티비티에서의 필요한 영속적 데이터를 저장하는 일을 해야한다.
이메서드에서는 또한 애니메이션과 같이 cpu를 지나치게 사용하는 작업들은 중단한다.
6.onstop()
:이메서드가 호출될때에는 액티비티가 더 이상 사용자에게 보이지 않는다.
에 메서드 호출 다음에는 onrestart() 또는 ondestroy()가 호출된다.
7.ondestroy()
:액티비티가 소멸되려고 하거나 또는 자발적으로 소멸될 때 호출
액티비티가 작업을 완료하고 finish() 메서드를 호출한 경우, 메모리를 해제한 경우, 구성변경 경우,, 그러나 액티비티가 종료될 때 항상 ondestroy()메서드가 호출되는 것은아니다.
----------------------------------------------------------------------------------------------------------------
액티비티가 처음 실행되면 onCreate() 메소드가 호출된다. 이후에 onStart(), onResume() 메소드를 거치면 실행상태가 된다. 다른 액티비티가 스택에 쌓여 상위에 오게 되면 onPause()가 호출되고, onStop()이 호출되어 중지상태로 바뀐다. 이후, 액티비티가 소멸될 경우 onDestroy()가 호출되어 액티비티가 메모리에서 사라진다.
onCreate()
onCreate() 메소드는 액티비티가 생성될 때 호출되어, 액티비티 내의 모든 요소들을 이 메소드 내에서 초기화 시킬 수 있다. UI 레이아웃을 코드 상으로 동작하게 하기 위하여 setContentView()를 통해 정의해주는 메소드도 이 메소드이다.
onStart()
onStart() 메소드는 액티비티가 화면에 보이기 직전에 호출되는 메소드이다.
onResume()
onResume() 메소드는 액티비티가 화면 상에 보여지게 되면서 사용자로부터 어떠한 동작도 받지 않았을 때 호출 된다.
onPause()
사용자가 해당 액티비티를 다른 액티비티로 전환 시킬 때 보내는 첫번 째 신호이다. 만약 화면을 전환하기 전 저장되지 않은 데이터가 있다면 사용자가 이 액티비티로 돌아오지 않을 것을 우려하여 이 메소드가 호출될 때 저장할 수 있다.
onStop()
액티비티가 더 이상 사용자에게 보이지 않을 때 호출되는 메소드이다. 다른 액티비티로 전환 시 스택에 다른 액티비티가 쌓여 가려지게 되면 호출된다.
onDestroy()
액티비티가 종료될 때 호출되는 메소드이다.
------------------------------------------------------------------------------------------------------------------
*생명주기 메서드와 더불어 액티비티의 동적 상태를 저장하고 복원하기 위해 특별히 만들어진
두 개의 메서드
1.onRestoreInstanceState(Bundle savedInstanceState)
-상태정보가 저장되었던 이전 액티비티인스턴스로부터 액티비티가 다시 시작하는 경우에 이메서드는 onstart()메서드가 호출된후 곧바로 호출된다.
oncreate()메서드처럼 이 메서드도 이전 상태 데이터를 포함하는 bundle 객체를 인자로 받는다.
2.onSaveInstanceState(Bundle outState)
-현재의 동적상태 데이터가 저장 될수 있게끔 액티비티가 소멸되기전에 호출된다.
여기서 동적 상태 데이터는 대게 사용자 인터페이스와 관련되는 것들이다.
직접 실행해보기
생명주기와 더불어
액티비티 내부에서 로깅 정보를 생성하고 그것을 관찰하는 메커니즘을 살펴보자!
<MainActivity.java>
package com.example.jeongsuji.login1;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;/*로그캣 패널 추가*/
public class MainActivity extends AppCompatActivity {
private static final String TAG= "jeongsuji.login1";/*로그캣 패널에는 여러가지 메시지들이 나타나므로 우리 메시지를 찾기쉽게 태그를 선언한다.*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);/*참조에서 ctrl+B를 누르면 해당 xml로 이동*/
Log.i(TAG,"onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG,"onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG,"onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG,"onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG,"onStop");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG,"onRestart");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG,"onDestroy");
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG,"onSaveInstanceState");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG,"onRestoreInstanceState");
}
}
[로그캣]
메서드가 호출되었는지 보여주는 우리 메세지만 로그캣 패널에 나타나게 하는 방법.
-android monitor -> 도구 창 에서 logcat 탭을 선택 ->도구 창 오른쪽 위의 드롭다운 상자에서 edit filter configuration 메뉴옵션 선택 -> create new logcat filter 대화상자에서 namae에 lifecycle 입력 ,logtag 필드에는
내가 MainActivity.java 에 선언한 채그 값 입력 ->ok.
1.어플리케이션 실행한다.
이때, onRestoreIstanceState()메서드는 호출 되지 않았다.
이상황에서는 복원할 상태 데이터가 없기때문에
2.장치화면의 아래쪽 가운데에 있는 홈버튼 눌른다.
액티비티가 더이상 포그라운드에 있지 않고 사용자가 볼수도 없다는 것을 런타임이 알고 그 액티비티를 중단시킨다.
그러나 액티비티가 동적 상태 데이터를 저장하기 위한 기회를 주기위해 런타임이 onSaveInstance()메서드를 호출 한 것이다.
결국, 이후에 액티비티가 소멸되느냐 또는 그냥 다시 시작되드냐는 런타임에게 달려있다.
3. 애플리케이션 다시 시작한 경우
4.백 버튼 눌렀을 때
5.홉 버튼 누르고 앱 닫기
출처:핵심만 골라 배우는 안드로이드 스튜디오
'안드로이드' 카테고리의 다른 글
[안드로이드]리스트뷰에 추가하기 (0) | 2017.12.22 |
---|---|
[안드로이드] RecyclerView의 item 클릭하기 (0) | 2017.12.21 |
[안드로이드]리사이클뷰 (0) | 2017.12.21 |
[안드로이드]액티비티 상태를 저장하고 복원하기 (0) | 2017.12.14 |
[안드로이드] 아키텍처 (0) | 2017.12.14 |