1. Activity
- 앱이 실행되면 전체 화면에 앱의 UI가 표시
- 사용자가 입력한 화면 터치 or 버튼 터치 등의 이벤트 처리
- 새로운 UI를 화면의 전체 영역에 표시
1) 정의
- 사용자와 상호작용 할 수 있는 화면을 제공하는 애플리케이션의 구성 요소
- View → Activity → Window
- ex. 전화 걸기, 사진 찍기, 이메일 보내기, 지도 보기
2) 액티비티와 사용자 인터페이스 연결
- setContentView : 액티비티에 사용자 인터페이스 정의한 View 연결
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
}
}
3) 액티비티 등록
- 모든 Activity 컴포넌트는 Android Manifest 파일에 등록
<activity>
android:name=".FirstActivity"
android:exported="false"
</activity>
2. Intent
1) 정의
- 일종의 메시지 객체
- 다른 앱의 구성 요소(액티비티, 서비스, 브로드 캐스트리시버)로 작업 요청 가능
2) 종류
명시적 인텐트 (Explicit Intent)
- 시작할 구성 요소의 이름을 인텐트 객체에 설정
- 보통 현재 앱 안에 있는 구성 요소(ex. 액티비티, 서비스)를 시작 시킬 때 사용
암시적 인텐트 (Implicit Intent)
- 시작할 구성 요소의 이름 지정 X, 일반적인 작업(ex. 전화 걸기, 지도 보기)을 인텐트 객체에 설정
- 안드로이드 시스템 : 모든 앱 검색 → 인텐트 일치하는 인텐트 필터 찾음
- 인텐트 필터를 포함한 앱 구성 요소 시작
- 보통 다른 앱 안에 있는 구성 요소를 구동하는 데 사용
3) Intent 객체
- 컴포넌트 이름
- 호출할 타켓 컴포넌트 이름
- 암시적 인텐트 : 이름 지정 X
//명시적 인텐트 : 애플리케이션 컨텍스트 정보, 호출한 액티비티 클래스 Intent(this, **SecondActivity::class.java**) //암시적 인텐트 : 작업, 데이터 (이름 지정 X ) Intent(Intent.ACTION_DIAL, Uri.parse("tel:114"))
- 작업
- ACTION_VIEW : 웹 페이지 표시
- ACTION_CALL : 전화연결
- ACTION_DIAL : 전화 걸기 화면 표시
- 데이터
- 작업에 필요한 데이터
Intent(Intent.ACTION_DIAL, **Uri.parse("tel:114")**) Intent(Intent.ACTION_VIEW, **Uri.parse("geo:37.565350, 127.01445")**)
- 엑스트라(Extra)
- 요청한 작업을 수행하기 위해 필요한 추가 정보를 담고 있는 키-쌍 데이터
4) 명시적 인텐트
//애플리케이션 컨텍스트 정보, 호출한 액티비티 클래스
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
- FirstActivity에서 SecondActivity 시작 시키기
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
val btn = findViewById<Button>(R.id.buttonFirstActivity)
btn.setOnClickListener{
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
}
}
}
- SecondActivity : Activity 종료
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
val btn = findViewById<Button>(R.id.buttonSecondActivity)
btn.setOnClickListener{
finish()
}
}
}
5) 암시적 인텐트
//작업, 데이터 (이름 지정 X )
val call_intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:114"))
startActivity(call_intent)
- 암시적 인텐트 수신 (인텐트 필터)
- 인텐트 필터가 인테트 작업, 데이터 및 카테고리를 근거로 어느 유형의 인텐트를 수신할 지 결정
<activity android:name=".SecondActivity"
android:label="Second Activity">
<!--추가된 인텐트 필터 시작-->
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
<!--추가된 인텐트 필터 끝-->
</activity>
3. 액티비티 간의 데이터 전달
1) 데이터 전달
- 인텐트에 컴포넌트 실행을 요청할 때 데이터를 함께 전달하라면 엑스트라 데이터 이용
- extra data : 이름과 쌍으로 된 정보 전달
2) Extras에 값을 저장하는 메소드
Intent putExtra(String name, int value)
Intent putExtra(String name, String value)
Intent putExtra(String name, boolean value)
3) Extras에 저장된 값을 읽는 메소드
int getIntExtra(String name, int defaultValue)
String getStringExtra(String name)
boolean getBooleanExtra(String name, boolean defaultValue)
4) 예시
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
val btn_call3 = findViewById<Button>(R.id.buttonThirdActivity)
btn_call3.setOnClickListener {
val edit_text = findViewById<EditText>(R.id.edit_data)
val strData = edit_text.text.toString()
val intent = Intent(this, ThirdActivity::class.java)
intent.putExtra("dataFromFirstActivity",strData)
startActivity(intent)
}
}
class ThirdActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_third)
val strData = intent.getStringExtra("dataFromFirstActivity")
val editText = findViewById<EditText>(R.id.editText)
editText.setText(strData)
val btn_close = findViewById<Button>(R.id.buttonThirdActivity)
btn_close.setOnClickListener{
finish()
}
}
}
4. 액티비티 생명주기
1) 액티비티 생명 주기액티비티의 수명
- onCreate() 호출 ~ onDestory() 호출
- onCreate() : 맨 처음 실행, 액티비티가 생성되어 레이아웃 설정 등 수행
- onDestory() : 호출되는 시점에 사용하고 있는 리소스를 모두 해제하고 생 마감
2) 액티비티의 화면이 눈에 보이게 되는 Visibility
- onStart() 호출 ~ onStop() 호출
- 사용자가 액티비티를 화면에서 보고 이와 상호작용 가능
- onStop() : 호출 후 새 액티비티가 시작되면 기존 액티비티 더 이상 표시 X
- onStart() 호출 ~ onStop() 여러 번 호출 가능
3) 액티비티가 foreground에서 동작
- onResume() ~ onPause() 호출
- 이 액티비티가 화면에서 다른 모든 액티비티 앞에 표시
- ex. 다이얼로그, 절전모드 → onPause() 호출
4) 콜백 메소드 호출 순서
- FirstActivity → SecondActivity 시작
- FirstActivity : onPause()
- SecondActivity : onCreate() → onStart() → onResume()
- FirstActivity : onStop()
- 단말기 뒤로 가기 버튼 누름
- SecondActivity : onPause()
- FirstActivity : onRestart() → onStart() → onResume()
- SecondActivity : onStop() → onDestory()
'Android' 카테고리의 다른 글
Selector (0) | 2023.08.08 |
---|---|
Font 변경 (0) | 2023.08.04 |
ImageView 이미지 넣기 (코드) (0) | 2023.08.03 |
registerForActivityResult (1) | 2023.08.03 |
Android UI (2) | 2023.08.01 |