관리 메뉴

드럼치는 프로그래머

[안드로이드] 안드로이드 핵심, 액티비티(Activity) 본문

★─Programing/☆─Android

[안드로이드] 안드로이드 핵심, 액티비티(Activity)

드럼치는한동이 2011. 11. 3. 16:14

액티비티

전체 구성

액티비티

액티비티 추가 절차

액티비티 시작

액티비티 리턴

액티비티의 상태

액티비티 라이프 사이클

 

 

액티비티(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 {


 public void onCreate(Bundle savedInstanceState) {


  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

 

//버튼을 누르면 다른 액티비티 호출

  Button btnCall=(Button)findViewById(R.id.call);

  btnCall.setOnClickListener(new Button.OnClickListener() {

   public void onClick(View v) {
    Intent intent = new Intent(CallActivity.this, SubActivity.class);
    startActivity(intent);

   }
  });
 }
}

 

서브 액티비티

public class SubActivity extends Activity {


 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.subactivity);

 

//버튼을 누르면 다시 이전 액티비티로 복귀

  Button btnClose=(Button)findViewById(R.id.close);
  btnClose.setOnClickListener(new Button.OnClickListener() {

   public void onClick(View v) {
    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

액티비티가 파괴될 때 호출된다.

 

 

 


Comments