관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[안드로이드] 공식문서 공부하기 (Activities - Introduction to Activities) 본문

안드로이드

[안드로이드] 공식문서 공부하기 (Activities - Introduction to Activities)

막무가내막내 2019. 7. 13. 20:53
728x90

오늘부터 안드로이드 개발자문서를 처음부터 읽어보면서 간략하게 정리해볼려고한다.

안드로이드 개발자문서를 정독해서 읽고 익숙해지는 것은 큰 도움이 된다고한다. 

 

Activity클래스는 Android 앱의 중요한 구성 요소이며, 액티비티가 시작되고 결합되는 방식은 플랫폼의 애플리케이션 모델의 기본 요소이다.

액티비티는 앱에서 UI를 그리는 창을 제공한다

앱에서 액티비티를 사용하려면 앱의 매니페스트에 해당 액티비티에 대한 정보를 등록해야하며 액티비티 라이프 사이클을 적절하게 관리해야한다.

 

 

[액티비티선언]

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

 필수속성 은 활동의 클래스 이름을 지정하는 android:name 이다.

 

 

[Manifest 구성]

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>
// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);

인텐트필터는 암시적과 명시적 요청이 있다. 암시적과 명시적 요청은 예시로 보면 이해하기쉽다. 이메일 전송을 요청할 때 명시적 요청은 정확히 대상을 정해서  "Gmail 응용 프로그램에서 이메일 전송 활동 시작" 이런식으로 하는거다. 그에반해 암시적 요청은  "작업을 수행 할 수있는 모든 활동에서 이메일 전송 화면 시작"을 지시한다. 그리고 사용자가 이메일을 보낼 수 있는 여러가지 어플리케이션 중 하나를 선택할 수가 있게한다.  인텐트필터는 위와같이 manifest에 선언 할 수 있으며  <action> 요소는이 활동이 데이터를 전송하도록 지정합니다. <category> 요소를 선언하면 DEFAULT활동이 실행 요청을 수신 할 수 있습니다. <data> 요소는이 활동 전송할 수있는 데이터의 타입을 지정한다

 

[permission 권한]

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>
<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

매니페스트의 태그를 사용하여 특정 활동을 시작할 수있는 앱을 제어 할 수 있다.

 

 

[Activity LifeCycle]

생명주기의 순서대로 대략적으로 나열해서 정리한다. 모두 시스템에서 자동으로 호출해준다.

1. onCreate()

구현시 액티비티의 필수 구성 요소를 초기화해야 한다. 또한 앱에서 뷰를 만들고 데이터를 바인딩한다. 가장 중요한 점은 setContentView()를 호출하여 액티비티의 사용자 인터페이스에 대한 레이아웃을 정의하기 위해 호출해야한다.

 

2. onStart()

활동이 시작 상태에 진입할 때 호출된다. foreground로 이동하여 상호작용하기 위한 액티비티의 최종 준비 작업에 필요한것을 실행한다.

 

3. onResume()

액티비티와 사용자가 상호작용하기 전에 호출된다. 이 시점에서는 액티비티는 액티비티 스택의 맨위에 있고 모든 사용자 입력을 capture한다. 앱의 핵심기능 대부분은 여기서 구현된다.

 

4. onPause()

활동이 포커스를 잃고(UI가 일부분 또는 완전히 가려질려할때 ) 일시 중지 상태가 되면 호출된다. 예를들어 사용자가 뒤로가기나 버튼같은 걸 눌러 다른 화면으로 전환되야 할 때 호출된다. 즉 사용자가 활동을 중지할(떠날) 때라고 보면 된다. 

사용자가 UI를 업데이트 할 것으로 예상되는 경우  UI를 계속 업데이트 할 수도 있다. 

그리고 onPause()를 어플리케이션이나 사용자 데이터 네트워크 호출, 또는 데이터베이스 트랜잭션을 실행하는데 사용되서는 안된다고 한다.

이것이 호출된 이후, OnStop()이나 OnResume()중 하나가 호출된다.

+) 주의해야할점은 onPause는 포커스만 뺏겼을뿐 아직 포어그라운드 상태라는 것이다. 그리고 액티비티가 인터럽트(?) 받았을 때 처음 호출되는 콜백함수이므로 여기에서 이 액티비티를 떠나기전 꼭 해야될것들을 미리 저장해놓거나 처리해놓는게 좋다. onStop까지 안가고 앱이 죽어버릴 확률도 있기 떄문이다.

 

5. onStop()

액티비티가 더이상 사용자에게 보여지지 않을 때 호출된다. 이것은 새로운 액티비티가 실행되거나 해당액티비티가 종료되는(사라지는) 경우 호출될 수 있다. 백그라운드 상태가된다. 이 다음 시스템이 부르는 콜백은 활동이 사용자와 상호작용하기위해 되돌아오는onRestart() 또는 활동이 완전히 종료되는 경우 onDestory()가 호출된다.

 

6. onRestart()

중지된 상태의 활동이 다시 시작될 때 시스템에서 onRestart()가 호출된다. 활동이 중지 된 시간부터 상태를 복원한다. 이 콜백다음은 항상 onStart()가 온다.

 

7. onDestory()

활동이 완전히 없어지기 전에 이 콜백이 호출된다. 최종콜백이다. 일반적으로 활동 또는 활동을 포함하는 프로세스가 파기될때 모든 활동의 자원이 해제되도록 보장하기위해 구현된다.

 

 

 

개인 추가정리)

onPause는 해당액티비티가 포커스만 뻇기고 아직 포어그라운드인 상태이다. onStop이 되는경우 백그라운드 상태가 되는것이다. 그리고 onPause는 액티비티가 처음 실행중에서 벗어날때 콜백받는 함수로서 여기다가 손실되면 안되거나 기억해야할 정보 또는 일처리를 해놓는게 좋다. onPasue에서 onStop이 호출안되고 앱이 꺼져버리는 경우도 있다고하는데 그 이유도 onPasue에서 꼭 필요하거나 중요한 일처리를 해야하는 이유 중 하나이다.

그리고 백그라운드로 들어간 액티비티는 시스템이 메모리 리소스가 부족한 경우 언제든지 백스택에서 제거될 수 가 있다. 이런 경우 해당 액티비티가 원래 재개되었을 때 기존에 쓰고있던 기록이나 정보들이 유실될 수 있다.  즉 onPasue와 기본 생명주기 상태를 기록하는게 힘들 수 있다. 그런 경우 onSaveInstanceState()를 사용하면된다 이에 대한 정리는 밑 그림과 내용을 참고하도록한다. 

 

 

 

 

 


처음으로 개발자문서를 공부 및 기억에 남길겸 포스팅을 하였는데 시간이 꽤걸리고 이게 효율적인건지 모르겠다... 그냥 포스팅을 하지말고 문서를 읽고 이해하고 반복하는게 나은것 같기도하다.//...

 

728x90
Comments