명시적 인텐트 : 특정한 컴포넌트를 직접적으로 호출할 때 사용되는 인텐트.
=> 앱 내부에서 다른 액티비티(startActivity())나 서비스(startService())를 시작(호출)할 때사용.
암시적 인텐트 : 특정한 컴포넌트를 명시하지않고, 수행의 일반적인 작업을 인텐트 객체에 설정하여 startActivity() 메소드에 넘긴다.
=> 해당 인텐트를 처리할 수 있는 모든 어플을 검색하여 적합한 인텐트 필더를 가진 컴포넌트를 선택해 실행시킬 수 있게 된다.
암시적 인텐트는 인텐트 필터를 동반하여 사용할 수 있다.
인텐트 필터<intent-filter> : 특정 인텐트에 반응할 준비가 되어있는지 나타내는 설정.
인텐트 필터의 하위 속성들
action : 컴포넌트가 어떤 능력인지에 대한 문자열. 개발자의 임의 지정 단어가 올수도 있고, 라이브러리에서 지정한 문자열도 이용가능하다.
category : 누구의 컴포넌트인지 표현하는 컴포넌트에 대한 추가 정보. 개발자의 임의 단어가 가능하긴 하지만, 보통 라이브러리의 준비된 단어를 사용하며, 암시적 인텐트를 실행할 경우 코드에서 지정하지 않아도 CATEGORY_DEFAULT가 선언된 것 처럼 행동하므로, DEFAULT 태그가 필수로 있어야 한다.
data : 컴포넌트를 실행하기 위해 필요한 데이터에 대한 상세정보를 명시.
URL 형식으로 표현되며, android:scheme, android:host, android:port , android:mimeType 등으로 선언한다.
Extra 데이터 : 인텐트를 이용하여 컴포넌트를 실행하면서 데이터를 전달 할 수 있다. 이때, 인텐트에 담아 전달하는 데이터를 Extra Data 라고 한다.
안드로이드의 4대 컴포넌트 중에 하나로, 사용자가 직접 상호작용하는 화면을 말한다.
=> UI담당. 사용자 입력에 반응하는 이벤트 기반 프로그래밍
각 액티비티는 독립적으로, 한 액티비티가 하나의 기능만을 담당한다.
ex. 이메일 목록을 출력하는 액티비티 하나. 이메일 작성하는 액티비티 하나. 등 각각 독립되어있다.
어플리케이션은 최소 한 개 이상의 액티비티를 포함하고있으며, 앱이 시작될 때 지정된 액티비티를 실행하여 사용자에게 첫 화면을 보여준다.
모든 액티비티는 Android Manifest파일에 등록해야 사용할 수 있다. 보통 Activity생성기능을 사용하면 자동으로 등록이 된다.
+Android Manifest의 역할 : 애플리케이션의 기본구조를 정의하고, 시스템이 앱을 어떻게 실행하는 지 알려주는 지시사항을 담고 있는 파일이다.
=> 패키지 이름 설정, 구성 요소 선언, 권한 설정 등
액티비티의 이름 등을 바꿀 때에는 Refactor>Rename을 사용해야 Android Manifest등에도 변경된 사실이 반영된다.
이렇게 등록한 액티비티는 setContentView()를 이용하여 인터페이스와 연결을 해줘야한다.
=>setContentView(R.layout.연결할액티비티이름)
onCreate( ) : 새로운 액티비티가 처음 생성되어 시작될 때, 레이아웃 설정 등을 수행하면서 한 번만 실행된다.
=> 액티비티 생명주기 시작
onStart( ) : 액티비티가 사용자에게 보이기(Visibility)직전에 실행 시작하는 시점. +BroadcastReceiver 실행
onResume( ) : 모든 액티비티 중 제일 앞에 표시되며, 사용자와 상호작용하는 사용자 입력 등의 무조건 실행해야하는 기능이 들어간다.
onPause( ) : 기기가 절전모드에 들어가거나 대화상자가 나타나는 등 완전히 소멸되는 것은 아니지만, 사용자가 돌아오지 않을 수 있기 때문에 그 동안 이루어졌던 변경사항을 저장한다.
4.5 새로운 액티비티를 부르면 onPause( )와 onStop( ) 사이에서 새로운 액티비티가 보여지고, 새로운 액티비티가 onResume( )되면 기존 액티비티의 onStop( )이 호출된다.
onStop( ) : 사용자에게서 onResume( )으로 보여지는 기존의 화면(Visibility)이 완전히 사라지고, 다른액티비티가 보여(onResume())지면 호출한다. 이후 onRestart( )를 통해 새로 시작할 액티비티를 onStart( ) 할 수 있게 되거나, onDestroy( )를 통해 생명주기가 종료된다.
onDestroy( ) : 화면이 완전히 종료될 때 (바로 직전에) 호출
=> 액티비티 생명주기 종료
=>시스템은 액티비티의 전체 수명 중에 OnStart( ) 및 onStop( )을 여러번 호출 할 수 있다. (사용자에게는 표시(Visibility)되었다 숨겨지는 상태를 오간다.)
Android Manifest에서 activity안에 선언된 android:exported="false"인 경우에는 동일한 앱, 동일한 사용자 id 등 특정한 경우에만 접근이 가능하다. true인 경우에는 외부의 모든 앱을 포함해서 접근이 가능하다.
+메인액티비티는 실행을 위해 꼭 true로 설정해줘야 한다.
Android Manifest에서 android : label 속성은 인텐트 필더를 포함한 구성요소가 하나 이상인 경우, 해당 구성 요소의 label 속성 값을 바탕으로 나열되므로 값을 지정하는 것이 좋다.
=> label을 통해, 활동이 사용자에게 표시될 때 직접 확인할 수 있다.