TIL231213 D18 Activity, Intent

jericho·2023년 12월 13일

TIL

목록 보기
18/62

오늘은 앱개발 입문주차 강의를 마저 듣고 과제를 작성했다.

액티비티 (Activity)

사용자와 상호작용할 수 있는 화면을 제공하는 애플리케이션의 구성요소이다.
전화걸기, 사진찍기, 이메일 보내기, 지도 보기 등이 이에 해당한다.

AndroidManifest.xml 파일 보면 application에 activity가 들어있는데, category를 LAUNCHER로 주면 앱이 실행되자마자 가장 먼저 실행되는 액티비티라는 것.

안드로이드 매니페스트의 역할

  • 애플리케이션 패키지 이름 (애플리케이션의 고유한 식별자 역할) 설정
  • 애플리케이션 구성요소들을 설명
  • 이 애플리케이션과 상호작용하는 다른 애플리케이션이 가져야할 권한 설정
  • 애플리케이션에서 사용하는 라이브러리 설정
  • 애플리케이션이 필요로 하는 안드로이드 API의 최소 수준 설정

인텐트 (Intent)

인텐트는 일종의 메시지 객체이다.
인텐트를 사용해 다른 앱 구성요소(액티비티, 서비스, 브로드캐스트리시버)로 작업을 요청할 수 있다.
startActivity, startService, sendBroadcast 등의 함수의 인자로 사용한다.

  • 명시적 인텐트: 시작할 구성요소의 이름을 인텐트 객체에 설정하고 인자로 직접 넘긴다. (보통 현재 앱 안의 액티비티 등을 시작시킬 때 사용)
  • 암시적 인텐트: 일반적인 작업(전화걸기, 지도보기 등)을 인텐트 객체로 넘긴다. 그러면 안드 시스템이 인텐트 필터 찾고 해당하는 앱으로 구동함 (혹은 앱 목록 띄워서 선택하라고 함).
 - 명시적, 암시적 인텐트 사용법
val intent = Intent(this, SecondActivity::class.java)
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:114"))
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.565350, 127.01445"))
(공통) startActivity(intent)
 - 인텐트 필터로 암시적 인텐트 수신
<intent-filter>
    <action android:name="android.intent.action.DIAL" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="tel" />
</intent-filter>
 - 인텐트간 데이터를 주고받는 방법
val intent = Intent(this, ThirdActivity::class.java)
intent.putExtra("dataFromFirstActivity", et.text.toString())

val data = intent.getStringExtra("dataFromFirstActivity")

액티비티 생명주기

위 그림과 같은 생명주기를 가진다.
다른 액티비티로 넘어갈 땐 일단 현재 액티비티를 퍼즈하고 다른 액티비티를 Create, Start, Resume까지 한 다음에 스탑한다.

해당 액티비티가 finish 하는 경우는 그 액티비티도 퍼즈하고 현재 액티비티가 Restart, Start, Resume 한 다음에 스탑하고 디스트로이 한다.

과제 - 로그인 및 자기소개페이지

로그인 화면이 첫 화면이고, 회원가입 화면과 자기소개 화면까지 만들면 된다.
빈칸이 있는지 검증하고, 화면간 이동 및 데이터 전달의 구현이 목표다.
크게 어렵지는 않은 과제라서, 일단 Lv3까지는 오늘 작성했다.
만들면서 느꼈지만, UI 작업은 역시 스트레스다.. 물론 아직 요령이 없어서 그렇겠지만, 위젯을 배치하고 위치를 잡는 과정이 너무 더디다. 일일이 위치를 잡고 마진을 맞추고.. 그러다가 만약 길이가 안맞아서 마진을 변경해야 하면 parent에 대해 marginHorizontal로 32dp 준 값을 또 일일이 변경해야 한다. (근데 글 작성하다보니 그러면 style로 만들면 되지 않았나 하는 생각이 든다. 근데 에딧은 그렇다쳐도 텍뷰는 매치패런트하고 호라이즌탈 주면 가운데정렬이라서 따로 해야할건데.. 그럼 왼쪽에 맞추고 마진 주면 되긴 하겠구나. 마진값은 변수로 쓸 수 있나..?)
요령이 생길 때까지 얼마나 걸릴지 모르겠다.

0개의 댓글