인텐트란? (Intent)
- Posted at 2010. 8. 15. 04:06
- Posted by 루지메이앙
- Filed under 안드로이드/이론정리
');
}
//-->
|
');
}
//-->
|
안드로이드 인텐트란? (Android Intent)
- 안드로이드 시스템에서 커뮤니케이션을 담당하는 역할로 컴포넌트간의 호출과 메시지 전달에 이용한다
- 런처에 나타나지 않는(루트 액티비티가 아닌) 액티비티를 실행시킬 때 사용한다
- Activity, Service, Broadcast Receiver 컴포넌트를 활성화 시킬 수 있다
- startActivity(), startActivityForResult()에 포함되어 Activity를 호출하며, 호출된 액티비티는 getIntent()를
이용해 메시지를 전달받고, 이후 전달받은 메시지는 onNewIntent()를 override하여 전달받을 수 있다
- startActivityForResult()를 이용해 호출된 액티비티는 인텐트에 반환값을 넣어 다시 자신을 호출한
액티비티에게 되돌려 줄 수 있으며 이때에는 setResult()에 인텐트를 포함시켜 반환한다
- startService(), bindService()에 포함되어 Service를 호출하며, 호출된 서비스는 onStart(), onBind()를
override하여 메시지를 전달받을 수 있다
- sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcase()등에 포함되어 Broadcast를 호출하며
호출된 브로드캐스트는 onReceive()를 override하여 메시지를 전달받을 수 있다
- 이외에도 PendingIntent 라는 권한을 위임하는 인텐트가 있다
- 메시지를 전달할때 putExtra()를 사용하며 전달받을때에는 getExtras().get변수타입() 또는
get변수타입Extra()을 사용한다
- 안드로이드 시스템에서 커뮤니케이션을 담당하는 역할로 컴포넌트간의 호출과 메시지 전달에 이용한다
- 런처에 나타나지 않는(루트 액티비티가 아닌) 액티비티를 실행시킬 때 사용한다
- Activity, Service, Broadcast Receiver 컴포넌트를 활성화 시킬 수 있다
- startActivity(), startActivityForResult()에 포함되어 Activity를 호출하며, 호출된 액티비티는 getIntent()를
이용해 메시지를 전달받고, 이후 전달받은 메시지는 onNewIntent()를 override하여 전달받을 수 있다
- startActivityForResult()를 이용해 호출된 액티비티는 인텐트에 반환값을 넣어 다시 자신을 호출한
액티비티에게 되돌려 줄 수 있으며 이때에는 setResult()에 인텐트를 포함시켜 반환한다
- startService(), bindService()에 포함되어 Service를 호출하며, 호출된 서비스는 onStart(), onBind()를
override하여 메시지를 전달받을 수 있다
- sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcase()등에 포함되어 Broadcast를 호출하며
호출된 브로드캐스트는 onReceive()를 override하여 메시지를 전달받을 수 있다
- 이외에도 PendingIntent 라는 권한을 위임하는 인텐트가 있다
- 메시지를 전달할때 putExtra()를 사용하며 전달받을때에는 getExtras().get변수타입() 또는
get변수타입Extra()을 사용한다
ACTION_SEND를 이용한 암시적 인텐트 적용시 나오는 Chooser
명시적 인텐트와 암시적(묵시적) 인텐트 (Explicit intent & intent)
- 인텐트를 사용할때에는 명시적으로 하나의 컴포넌트를 선택하여 메시지를 전달하는 방법과
암시적으로 여러 컴포넌트중 지정한 특성을 가진 컴포넌트중 하나를 선택하여 사용하는 방법이 있다
- 암시적 인텐트는 명시적으로 알지 못하는 컴포넌트 중 자신이 활용 가능한 컴포넌트를 다른
어플리케이션으로부터 불러서 사용할 수 있게 해주어 여러 어플리케이션의 컴포넌트를 활용가능하게 한다
이로인해 어플리케이션의 경계없이 서로다른 어플리케이션을 하나처럼 사용 가능하게 해준다
- 명시적 인텐트는 실행할 컴포넌트의 클래스명을 지정하여 활성화 시킨다
- 암시적 인텐트는 Action, Category, Data를 사용해 인텐트 필터에(intent filter) 걸러내고 남는
컴포넌트를 찾아(인텐트해석:intent resolving) 이중 한가지를 createChooser()로 선택하여 실행시킨다
- 인텐트 필터는 하나뿐이 아닌 여러개를 지정하여 일치하는 필터가 있을경우 통과할 수 있다
- Action은 AndroidManifest에 정의해놓은 각각의 컴포넌트가 처리할 행동을(Action) 참조하여 사용자가
지정한 Action과 일치하는 컴포넌트를 찾아내며 지정된 Action이 없을경우 일치한 것으로 간주한다
- Category는 AndroidManifest에 정의해놓은 각각의 컴포넌트 분류를(Category) 참조하여 사용자가
지정한 Category와 일치하는 컴포넌트는 찾아내며 지정된 Category가 없을경우 Category가 지정되지
않은 컴포넌트만 일치한 것으로 간주한다
- Data는 AndroidManifest에 정의해놓은 각각의 컴포넌트 URI를 참조하여 사용자가 지정한 type 또는
schema등 과 일치하는 컴포넌트는 찾아낸다
- 인텐트를 이용한 브라우저에 웹페이지 띄우기 예제
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Intent-Filter 값
http://developer.android.com/guide/topics/intents/intents-filters.html#iobjs
- 인텐트를 사용할때에는 명시적으로 하나의 컴포넌트를 선택하여 메시지를 전달하는 방법과
암시적으로 여러 컴포넌트중 지정한 특성을 가진 컴포넌트중 하나를 선택하여 사용하는 방법이 있다
- 암시적 인텐트는 명시적으로 알지 못하는 컴포넌트 중 자신이 활용 가능한 컴포넌트를 다른
어플리케이션으로부터 불러서 사용할 수 있게 해주어 여러 어플리케이션의 컴포넌트를 활용가능하게 한다
이로인해 어플리케이션의 경계없이 서로다른 어플리케이션을 하나처럼 사용 가능하게 해준다
- 명시적 인텐트는 실행할 컴포넌트의 클래스명을 지정하여 활성화 시킨다
- 암시적 인텐트는 Action, Category, Data를 사용해 인텐트 필터에(intent filter) 걸러내고 남는
컴포넌트를 찾아(인텐트해석:intent resolving) 이중 한가지를 createChooser()로 선택하여 실행시킨다
- 인텐트 필터는 하나뿐이 아닌 여러개를 지정하여 일치하는 필터가 있을경우 통과할 수 있다
- Action은 AndroidManifest에 정의해놓은 각각의 컴포넌트가 처리할 행동을(Action) 참조하여 사용자가
지정한 Action과 일치하는 컴포넌트를 찾아내며 지정된 Action이 없을경우 일치한 것으로 간주한다
- Category는 AndroidManifest에 정의해놓은 각각의 컴포넌트 분류를(Category) 참조하여 사용자가
지정한 Category와 일치하는 컴포넌트는 찾아내며 지정된 Category가 없을경우 Category가 지정되지
않은 컴포넌트만 일치한 것으로 간주한다
- Data는 AndroidManifest에 정의해놓은 각각의 컴포넌트 URI를 참조하여 사용자가 지정한 type 또는
schema등 과 일치하는 컴포넌트는 찾아낸다
- 인텐트를 이용한 브라우저에 웹페이지 띄우기 예제
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Intent-Filter 값
Intent 클래스의 정의 | AndroidManifest 일치값 | 설명 |
ACTION_MAIN | android.intent.action.MAIN | 시작(루트) 액티비티 |
ACTION_VIEW | android.intent.action.VIEW | 해당 자원을 보여주는 액션 |
ACTION_CALL | android.intent.action.CALL | 전화를 거는 액션 |
ACTION_DIAL | android.intent.action.DIAL | 전화 다이얼이 나오는 액션 |
ACTION_SEND | android.intent.action.SEND | 문자,메일등 데이터를 보내는 액션 |
ACTION_SCREEN_ON | android.intent.action.SCREEN_ON | 화면이 켜지는 액션 |
ACTION_BATTERY_LOW | android.intent.action.BATTERY_LOW | 배터리 부족 액션 |
Intent 클래스의 정의 | AndroidManifest 일치값 | 설명 |
CATEGORY_DEFAULT | android.intent.category.DEFAULT | 기본 카테고리 |
CATEGORY_LAUNCHER | android.intent.category.LAUNCHER | 어플리케이션 런쳐로 실행되는 분류 |
CATEGORY_HOME | android.intent.category.HOME | 홈스크린에 표시되는 액티비티 |
CATEGORY_BROWSABLE | android.intent.category.BROWSABLE | 인터넷 브라우저 사용분류 |
http://developer.android.com/guide/topics/intents/intents-filters.html#iobjs
액티비티 생명주기 (Activity LifeCycle)
- Posted at 2010. 8. 13. 02:03
- Posted by 루지메이앙
- Filed under 안드로이드/이론정리
');
}
//-->
|
');
}
//-->
|
안드로이드 액티비티 생명주기 (Android Activity LifeCycle)
- 액티비티는 효율적인 메모리 관리를 위해 생성, 소멸되는 조건인 생명주기를(Lifecycle) 가지고 있다
- 생명주기는 7가지 단계로 구분되며 다음 순서를 기본으로 진행된다
onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart() 또는 onDestroy()
- 각 상태에 따라 필요한 작업을 메소드를 오버라이드 하여 처리해주면 된다
- 여러개의 액티비티를 이용중 시스템의 리소스가 부족하면 다음상태의 액티비티를 강제로 종료시킨다
onDestroy() - 1순위, onStop() - 2순위, onPause() - 3순위
- onPause() 상태의 Callback은(실행완료) 보장하지만, onStop()과 onDestroy()는 보장할 수 없다
(미완료 상태에서 System이 강제종료 시킬 수 있으므로 되도록 onPause()에서 종료를 대비 해야한다)
- 강제종료된 Activity는 리소스가 확보되면 다시 복구 시킨다
- 강제종료시에는 데이터 복원를 대비하여 onPause() 실행 전 onSaveInstanceState(Bundle b) 를 실행시킨다
- 강제종료시에는 onStart() 호출 후 실행되는 onRestoreInstanceState(Bundle b) 또는
onCreate(Bundle b) 를 사용하여 복원작업을 수행할 수 있다
- 화면의 Orientation(가로/세로) 변경시 onDestroy()를 호출 후 onCreate()가 실행된다
- 액티비티는 효율적인 메모리 관리를 위해 생성, 소멸되는 조건인 생명주기를(Lifecycle) 가지고 있다
- 생명주기는 7가지 단계로 구분되며 다음 순서를 기본으로 진행된다
onCreate(), onStart(), onResume(), onPause(), onStop(), onRestart() 또는 onDestroy()
- 각 상태에 따라 필요한 작업을 메소드를 오버라이드 하여 처리해주면 된다
- 여러개의 액티비티를 이용중 시스템의 리소스가 부족하면 다음상태의 액티비티를 강제로 종료시킨다
onDestroy() - 1순위, onStop() - 2순위, onPause() - 3순위
- onPause() 상태의 Callback은(실행완료) 보장하지만, onStop()과 onDestroy()는 보장할 수 없다
(미완료 상태에서 System이 강제종료 시킬 수 있으므로 되도록 onPause()에서 종료를 대비 해야한다)
- 강제종료된 Activity는 리소스가 확보되면 다시 복구 시킨다
- 강제종료시에는 데이터 복원를 대비하여 onPause() 실행 전 onSaveInstanceState(Bundle b) 를 실행시킨다
- 강제종료시에는 onStart() 호출 후 실행되는 onRestoreInstanceState(Bundle b) 또는
onCreate(Bundle b) 를 사용하여 복원작업을 수행할 수 있다
- 화면의 Orientation(가로/세로) 변경시 onDestroy()를 호출 후 onCreate()가 실행된다
- onCreate()
액티비티가 처음 생성될때와(화면이 회전되어 orientation이 변경될때도 기본으로 실행) 실행되며
레이아웃배치와 변수선언 등 각종 초기화 작업을 구현하는 단계이다
완료 후 onStart()를 호출한다
- onStart()
onCreate() 이후 또는 onRestart()로 다시 시작된 후 처음으로 호출하는 단계이며
화면생성이 완료되고 사용자 입력을 받기 바로 직전의 단계이다
완료 후 onResume()를 호출한다
- onResume()
onResume() 이 실행되면 상호작용이 가능하며 모든준비가 완료되고 액티비티가 완벽하게 활성 상태가 된다.
onPause()에서 다시 시작되었을때 호출하는 단계이기도 하다
- onPause()
상태에서 다른 Activity에 포커스를 넘겨준 후 비활성화(background) 되며 상호작용이 중단된 단계이다
이 상태 이후부터는 언제든지 시스템의 강제종료가 가능하며 이 상태가 완료 되어야 다음 Activity가
활성화(foreground) 되고 이후 이 액티비티는 onStop() 상태가 된다
단, 다음 Activity 의 테마가 translucent 인 투명한 배경의 Activity 와 같이 풀스크린이 아닌
Activity일 경우에는 onStop() 상태가 되지 않고 onPause()를 유지한다
하나 더 덧붙이면, 투명배경의 Activity와 비슷한 Diaglog 의 경우에는 onPause()가 적용되지 않는다
- onStop()
Activity가 사용자에게 보이지 않는 비활성화 상태로 돌아서게 되면 호출하는 단계이다
=> 다른 activity 를 활성화 시켰을때는 background로 onStop() 상태가 유지되며,
=> 현 액티비티에서 finish()를 호출하거나 back key를 이용해 home activity로 돌아갈때는
onStop() 후 onDestroy()를 호출하고
=> 다음 Activity에서 back 하여 현 액티비티로 돌아올때는 onRestart(), onStart(), onResume 순으로 호출한다
- onDestroy()
finish(), finishActivity() 같은 정상적인 종료시에 호출되며, onCreate()에서 호출한 자원의 반납등을 하는 단계이다
- onRestart()
onStop()인 비활성화 상태에서 다시 활성화되는 단계에서 발생한다
액티비티가 처음 생성될때와(화면이 회전되어 orientation이 변경될때도 기본으로 실행) 실행되며
레이아웃배치와 변수선언 등 각종 초기화 작업을 구현하는 단계이다
완료 후 onStart()를 호출한다
- onStart()
onCreate() 이후 또는 onRestart()로 다시 시작된 후 처음으로 호출하는 단계이며
화면생성이 완료되고 사용자 입력을 받기 바로 직전의 단계이다
완료 후 onResume()를 호출한다
- onResume()
onResume() 이 실행되면 상호작용이 가능하며 모든준비가 완료되고 액티비티가 완벽하게 활성 상태가 된다.
onPause()에서 다시 시작되었을때 호출하는 단계이기도 하다
- onPause()
상태에서 다른 Activity에 포커스를 넘겨준 후 비활성화(background) 되며 상호작용이 중단된 단계이다
이 상태 이후부터는 언제든지 시스템의 강제종료가 가능하며 이 상태가 완료 되어야 다음 Activity가
활성화(foreground) 되고 이후 이 액티비티는 onStop() 상태가 된다
단, 다음 Activity 의 테마가 translucent 인 투명한 배경의 Activity 와 같이 풀스크린이 아닌
Activity일 경우에는 onStop() 상태가 되지 않고 onPause()를 유지한다
하나 더 덧붙이면, 투명배경의 Activity와 비슷한 Diaglog 의 경우에는 onPause()가 적용되지 않는다
- onStop()
Activity가 사용자에게 보이지 않는 비활성화 상태로 돌아서게 되면 호출하는 단계이다
=> 다른 activity 를 활성화 시켰을때는 background로 onStop() 상태가 유지되며,
=> 현 액티비티에서 finish()를 호출하거나 back key를 이용해 home activity로 돌아갈때는
onStop() 후 onDestroy()를 호출하고
=> 다음 Activity에서 back 하여 현 액티비티로 돌아올때는 onRestart(), onStart(), onResume 순으로 호출한다
- onDestroy()
finish(), finishActivity() 같은 정상적인 종료시에 호출되며, onCreate()에서 호출한 자원의 반납등을 하는 단계이다
- onRestart()
onStop()인 비활성화 상태에서 다시 활성화되는 단계에서 발생한다