화면을 구성하는 가장 기본적인 UI
사용자와 상호 작용 할 수 있는 화면을 제공하는 애플리케이션의 구성요소
View를 상속받은 Activity가 Window에 출력된다.
(사용자 인터페이스는 View객체들로 구성)
setContentView()
를 이용하여 액티비티에 사용자 인터페이스를 정의한 View를 설정Android Manifest 파일
에 등록되어야 한다.애플리케이션 패키지 이름 (애플리케이션의 고유한 식별자 역할) 설정
애플리케이션 구성요소들을 설명
이 애플리케이션과 상호작용하는 다른 애플리케이션이 가져야할 권한 설정
애플리케이션에서 사용하는 라이브러리 설정
애플리케이션이 필요로 하는 Android API의 최소 수준 설정
일종의 메시지 객체임
이것을 사용해 다른 앱 구성요소 (액티비티, 서비스, 브로드 캐스트리시버)로 작업을 요청 할 수 있다.
- 액티비티 시작하기
- 서비스 시작하기
- 브로드캐스트 전달하기
객체명을 지정해서 startActivity()
또는 startService()
에 넘긴다.
보통 본인의 앱 내의 구성요소에 사용
객체명 없이 일반적인 작업 (전화걸기, 지도)을 인텐트 객체에 설정하고 startActivity()
에 넘긴다.
안드로이드 시스템
이 모든 앱을 검색 후 해당 인테트 필터
에 적합한 앱 구성 요소를 띄어준다.
📡 인텐트 필터
: 해당 구성 요소가 수신하고자 하는 인텐트의 유형
보통 다른 앱 안에 있는 구성 요소를 구동하는데 사용
호출할 구성 요소의 이름
선택 항목이므로, 컴포넌트 이름을 지정하지 않으면 암시적 인텐트를 의미한다.
작업에 필요한 데이터
데이터는 URI 형식
으로 설정
🔎 URI
: 정보의 고유한 명칭으로 웹 주소를 나타내는 URL 보다 더 상위의 개념
🧩 전화걸기(작업) 을 위해 전화번호(데이터) 를 넘김
K-V 쌍의 데이터
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
val btn = findViewById<Button>(R.id.btn1)
btn.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
}
}
작업
과 데이터
를 지정해야 한다.🧩 114 번호로 다이얼 작업을 수행하는 액티비티 실행
val call_intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:114"))
startActivity(call_intent)
암시적 인텐트를 수신하려면, 인텐트 필터
를 <intent-filter> 요소
로 매니페스트 파일에
선언
각 인텐트 필터가 인텐트의 작업, 데이터 및 카테고리
를 근거로 어느 유형의 인텐트를 수신할 지를 결정한다.
1) AndroidManifest.xml 에서 수신 받을 액티비티의 <activity>요소 하위에 <intent-filter>태그를 추가한다.
2) android:label 속성이 지정되어 있지 않다면, 값을 지정해주자.
📌 암시적 인텐트를 통과시킨 인텐트 필터를 포함한 구성요소가 하나 이상인 경우,
해당 구성요소의 android:label 속성 값을 바탕으로 나열된다.
- 인텐트에 컴포넌트 실행을 요청할 때 데이터를 함께 전달하려면 엑스트라 데이터를 이용한다.
- 엑스트라 데이터는 인텐트에 담는 부가 정보라 할 수 있다.
- Extras를 활용하여 이름과 값의 쌍으로된 정보를 전달
- Intent putExtra(String name, int value)
- Intent putExtra(String name, String value)
- Intent putExtra(String name, boolean value)
- int getIntExtra(String name, int defaultValue)
- String getStringExtra(String name)
- boolean getBooleanExtra(String name, boolean defaultValue)
액티비티의 상태
에 따라 처리해야 할 상황이 존재하기 때문onCreate()
호출과 onDestroy()
호출 사이에 있다.- 최초 실행
- 액티비티가 생성되어 레이아웃 설정 등을 수행
- 액티비티 종료
- 호출되는 시점에 사용하고 있는 리소스를 모두 해제하고 생을 마감
- onStart() 에서 onStop() 호출 사이에 있다. (Started, Resumed, Paused)
- 이 기간 중에는 사용자가 액티비티를 화면에서 보고 이와 상호 작용할 수 있다.
- onStop() 이 호출되어 새 액티비티가 시작되면 이 액티비티는 더 이상 표시되지 않는다.
- 시스템은 액티비티의 전체 수명 내내 onStart() 및 onStop() 을 여러 번 호출할 수 있다.
- 이 때 액티비티는 사용자에게 표시되었다 숨겨지는 상태를 오가게 된다.
- onResume() 에서 onPause() 호출 사이를 말한다.
- 사용자 입력도 여기에 집중된다.
- 액티비티는 전경에 나타났다 숨겨지는 전환을 자주 반복할 수 있다.
🧩 기기가 절전모드에 들어가거나 대화상자가 나타나면 onPause() 가 호출된다.
액티비티가 생성되고 해제될 때까지 액티비티의 상태에 따라서 불려지는 메소드를 라이프 사이클 콜백 메소드라 부른다.
모든 라이프 사이클에는 콜백 메소드가 있다.
필요한 경우에 해당 콜백 메소드를 재 정의할 수 있다.
onCreate()
: 반드시 구현해야 하는 메소드로서 액티비티가 생성되면서 호출됨- 가장 중요한 작업은 화면을 setContentView()를 호출하여 설정하는 것
onPause()
: 사용자가 액티비티를 떠나고 있을 때 호출됨- 액티비티가 완전히 소멸되는 것은 아니지만 사용자가 돌아오지 않을 수 있기 때문에 그 동안 이루어졌던 변경사항을 저장
🧩 FirstActivity에서 SecondActivity 시작
1) FirstActivity의 onPause()
2) SecondActivity의 onCreate() -> onStart() -> onResume()
3) FirstActivity의 onStop()
🧩 단말기의 뒤로가기 버튼 클릭
1) SecondActivity의 onPause()
2) FirstActivity의 onRestart() -> onStart() -> onResume()
3) SecondActivity의 onStop() -> onDestroy()
1. 수명주기 콜백 메소드를 생성하고자 하는 클래스(MainActivity 등) 의 소스 코드를 연다.
2. 메소드를 생성하고자 하는 소스 코드의 위치에 커서를 찍고, 우클릭 -> Generate 클릭
3. Override Methods... 클릭 -> 생성하고자 하는 메소드를 선택한 후 OK
- 콜백 메소드 안에 로그를 출력하는 코드를 삽입
val TAG = "MainActivity_Lifecycle"
Log.i(TAG, "log message")