- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[안드로이드] 안드로이드 핵심, 액티비티(Activity) 본문
액티비티
전체 구성
액티비티
액티비티 추가 절차
액티비티 시작
액티비티 리턴
액티비티의 상태
액티비티 라이프 사이클
액티비티(Activity)
안드로이드 응용프로그램을 구성하는 네 가지 컴포넌트 중 하나로 중추 역할을 맡고 있다. 우리가 보게 되는 화면 전체가 액티비티이다. 액티비티는 반드시 뷰를 가져야 하며 뷰는 서로 중첩이 가능하지만 액티비티는 서로 중첩되지 않는다.
보편적으로 클래스를 생성하고 그 클래스가 액티비티 클래스(Activity)를 상속 받으면 하나의 액티비티가 된다.
액티비티 추가 절차
1. 새로운 액티비티의 레이아웃에 관하여 작성한 XML, 그리고 자바코드를 만든다.
2. 기존의 액티비티에서 새로운 액티비티를 호출하는 메서드를 추가한다. (startActivity 메서드)
3. 매니페스트(AndroidManifest.xml)를 수정하여 새로운 액티비티를 등록한다.
액티비티 시작
액티비티에서 다른 액티비티를 시작시키는 방법은 2가지가 있다. 2가지 메서드는 모두 Activity클래스이 메서드이므로 액티비티에서는 다른 작업 없이 사용하면 된다.
1. startActivity
public void startActivity (Intent intent) << 사용 예시 >> Intent intent = new Intent(this, TestActivity.class); startActivity(intent); // TestActivity클래스를 수행시킨다. |
인텐트를 인자로 받아서 해당 인텐트가 가리키는 액티비티를 수행시킨다. 해당 액티비티는 Manifest에 등록이 되어 있어야 한다.
2. startAcitivityForResult
public void startActivityForResult (Intent intent, int requestCode) << 사용 예시 >> Intent intent = new Intent(this, TestActivity.class); startActivityForResult(intent, 0); |
액티비티를 띄우고 나서 어떠한 결과를 받고자 할 경우 사용하는 메서드이다. 이 메서드로 액티비티를 실행했을 경우 기대되는 결과값은 onActivityResult 메서드로 받아서 처리할 수 있다.
requestCode – 한 액티비티가 여러 곳에 요청을 할 수 있기 보낸 요청을 구분하기 위해 requestCode도 같이 전달인자로 둔다. 자신이 원하는 값을 둘 수 있다.
액티비티 예제
메인 액티비티 public class MainActivity extends Activity { //버튼을 누르면 다른 액티비티 호출 Button btnCall=(Button)findViewById(R.id.call); btnCall.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { } 서브 액티비티 public class SubActivity extends Activity { //버튼을 누르면 다시 이전 액티비티로 복귀 Button btnClose=(Button)findViewById(R.id.close); public void onClick(View v) {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(CallActivity.this, SubActivity.class);
startActivity(intent);
});
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.subactivity);
btnClose.setOnClickListener(new Button.OnClickListener() {
finish();
}
});
}
}
액티비티 리턴
onActivityResult
startActivityForResult의 요청이 되돌아 오는 경우 자동으로 호출되는 메서드이다. 단, back Button에 의해서 되돌아 오는 경우는 호출되지 않는다. 프로그램적으로 되돌아 와야 한다.
protected void onActivityResult (int requestCode, int resultCode, Intent data) protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 0) { . . . // 요청 별로 수행하고 싶은 코드 |
인자 |
설명 |
int requestCode |
요청 시 건네준 코드 |
int resultCode |
요청한 액티비티에서 건네준 코드 |
Intent data |
요청한 액티비티에서 건네준 인텐트 |
액티비티의 상태 변화
액티비티는 특정 상태를 순환하는데 이것을 생명주기(Life cycle)라고 한다. 생명주기에서 반복되는 상태는 시작, 실행,활성, 비활성화, 정지, 종료이다. 시스템에서는 이런 액티비티를 스택(stack)으로 관리한다. 스택 상의 액티비티는 세 가지 상태 중 하나를 가지게 된다.
상태 |
설명 |
실행(Running) |
사용자가 직접 사용하는 상태 |
일시 정지(Pause) |
포커스를 잃었지만 사용자에게는 여전히 보이는 상태 |
정지(Stopped) |
다른 액티비티로 인해서 완전히 가려져 있는 상태 |
액티비티의 라이프 사이클
쉽게 말하면...
수정중
라이프 사이클 제어의 중요성
수정중
상태 변화에 다라 호출 되는 메서드 중에 onCreate는 반드시 구현해야 한다. 이 메서드는 액티비티가 생성될 때 호출이 되기 때문이다.
그 다음으로 onPause의 경우는 대부분 구현해야 한다. 이 메서드가 구현되는 상태를 Killable 상태라고 부르며 시스템에서 언제든지 강제로 종료할 수 있다. 그렇게 되면 onStop이나 onDestroy가 구현되지 않기 때문에 미저장된 정보를 마지막으로 저장하기 위해서 onPause를 구현해야 하는 것이다.
나머지 메서드들은 필요할 때만 구현해도 되며 onStart, onStop, onDestroy는 구현하는 경우가 많지 않다.
메서드 |
설명 |
onCreate |
액티비티를 초기화한다. |
onRestart |
재시작 될 때 호출된다. |
onStart |
액티비티가 사용자에게 보이기 직전에 호출된다. |
onResume |
사용자와 상호작용을 하기 직전에 호출된다. |
onPause |
다른 액티비티가 실행될 때 호출된다. |
onStop |
액티비티가 사용자에게 보이지 않게 될 때 호출된다. |
onDestroy |
액티비티가 파괴될 때 호출된다. |
[출처] 안드로이드 핵심, 액티비티(Activity)|작성자 녹차
'★─Programing > ☆─Android' 카테고리의 다른 글
[안드로이드] 안드로이드의 스레드(Thread) - B. 핸들러 (0) | 2011.11.03 |
---|---|
[안드로이드] 안드로이드의 스레드(Thread) - A. 스레드 (0) | 2011.11.03 |
[안드로이드] 안드로이드 프로젝트 폴더와 파일 설명 (0) | 2011.07.22 |
[안드로이드] XML로 메뉴만들기 - 메뉴항목을 보이고 안보이게 하기 (0) | 2011.07.20 |
[안드로이드] WindowManager 객체를 이용하여 디바이스 화면의 폭과 높이 얻기 (0) | 2011.06.15 |