[내배캠 Android 4기] TIL 0619

오리너구리·2024년 6월 19일
0

TIL

목록 보기
35/48
post-thumbnail

오늘 계획

  • 코드카타 42번
  • 안드로이드 입문 강의 4 주차
  • 과제 구상
  • .filter 공부

안드로이드 입문 강의

⏲️ 공부시간 10 : 40 ~ 14 : 40

4주차 강의

Activity

화면을 구성하는 가장 기본적인 UI

모든 Activity는 Android Manifest 파일에 등록되어야함

Intent

일종의 메시지 객체로 다른앱 구성요소로 작업을 요청 할 수있다.

명시적 인텐트(Explicit Intent)

  • 특정한 애를 인텐트 객체에 설정해서 startActivity() 혹은 startService()에 넘기는거

암시적 인텐트(Implicit Intent)

  • 일반적인 작업(전화걸기, 지도보기) 을 인텐트 객체에 설정해서 startActivity()에 넘기면 안드로이드 시스템이 인텐트 필터를 사용해서 해당 인텐트와 일치하는 앱을 시작히시키는거

Intent 객체

  1. 컴포넌트 이름(ComponentName) (명시적 인텐트일때)

    인텐트를 처리하는 타겟 컴포넌트 이름

  2. 작업 (Action)

    수행되어야할 작업을 나타내는 문자열

  3. 데이터 (Data)

    작업에 필요한 데이터(URI형식)

  4. 카테고리(Category)

    작업에 대한 추가적인 정보 제공

  5. 엑스트라(Exctra)

    요청한 작업을 수행하기 위해 필요한 추가 정보를 담고있는 키-값 쌍의 데이터

URI(Uniform Resource Identifier )

리소스를 고유하게 식별하기 위한 문자열.

URL 과 URN을 포함하는 개념

URI는 스킴, 호스트, 경로, 쿼리, 프래그먼트 로 이루어져있음

URI 예시

  • 웹 페이지: ****https://www.example.com/search?q=URI+example#section1
    스킴https리소스에 접근하는 방법 정의
    호스트www.example.com리소스가 위치한 서버의 도메인 이름
    경로/search서버 내의 특정 리소스 지정
    쿼리q=URI+example리소스에 대한 추가 매개변수 지정
    ’q’ 는 검색 쿼리 매개변수
    프래그먼트#section1리소스 내의 특정 부분 식별
  • 파일 경로: file:///C:/path/to/file.txt
    • 스킴 | file
    • 경로 | /C:/path/to/file.txt
    • 호스트, 쿼리, 프래그먼트 없음
  • 이메일 주소: mailto:example@example.com
  • 전화 번호: ****tel:+1234567890
    • 스킴 | tel
    • 경로 | +1234567890
    • 호스트, 쿼리, 프래그먼트 없음
  • 지도 위치: geo:37.7749,-122.4194
    • 스킴 | geo
    • 경로 | 37.7749,-122.4194
    • 호스트, 쿼리, 프래그먼트 없음

스킴 종류

  1. http/https : 웹 페이지에 접근하기 위한 스킴
  2. mailto : 이메일 주소를 지정하기 위한 스킴
  3. tel : 전화번호를 지정하기 위한 스킴
  4. geo : 지리적 위치를 지정하기 위한 스킴
  5. file : 로컬 파일 시스템의 파일을 지정하기 위한 스킴
  6. content : 콘텐츠 제공자를 통해 데이터를 접근하기 위한 스킴
  7. data : 인라인 데이터를 지정하기 위한 스킴
  8. javascript : 웹 페이지 내에서 자바스크립트 코드를 실행하기 위한 스킴
  9. sms : SMS 메세지를 보내기위한 스킴
  10. market : 안드로이드 마켓에서 앱을 여는 스킴
  11. intent : 안드로이드 인텐트 스킴으로, 특정 작업을 수행하기 위한 인텐트를 지정하는 스킴
  12. ftp : 파일 전송 프로토콜을 사용하여 파일을 전송하기 위한 스킴

등등 여러 종류가 있고,
URI 스킴의 전체 목록은 IANA (Internet Assigned Numbers Authority)에서 관리하며,

IANA의 URI 스킴 목록에서 다양한 스킴을 확인할 수 있음

Uri.parse()

문자열로 표현된 URI를 Uri 객체로 변환해주는 함수

val uriString = "https://www.example.com/search?q=URI+example#section1"
val uri = Uri.parse(uriString)
  • Uri 객체의 다른 메서드
    1. getURI의구성요소 : URI의 구성요소를 반환해줌 (스킴, 호스트, 경로, 쿼리, 프래그먼트)

명시적 인텐트 예시

val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)

암시적 인텐트 예시

fun doOnBtnClick(view : View) {
		when (view.getId()) {
				R.id.buttonDialActivity -> {
						val call_intent = Intennt(Intetn.ACTION_DIAL, Uri.parse("tel:114"))
						startActivity(call_intent)
				}
		}
}				

암시적 인텐트 수신하는 방법

manifest 파일에 를 선언해줘야함

인텐트 필터 예시

 <intent-filter>
    <action android:name="android.intent.action.DIAL" />
    <category android:name="android.intent.category.DEFAULT" />
	  <data android:scheme="tel" />
 </intent-filter>

화면 닫을 때 → finish()메서드 이용

강의보고 궁금한 점

  1. 인텐트의 액션의 종류는 어떤게 있지??

    → 생각대로 엄청 많은데, 자주 쓰는 애들은

    ACTION_VIEW : 주어진 URI를 보기 위해 사용 (EX. 웹페이지 열기, 연락처 보여주기 등)

    ACTION_EDIT : 주어진 URI의 데이터 편집

    ACTION_INSERT : 주어진 URI에 새로운 데이터 삽입

    ACTION_SEND : 데이터를 다른 앱으로 보냄

    ACTION_SENDTO : 특정 주소로 데이터를 보냄 (EX. 이메일주소나 전화번호로 데이터 전송)

    ACTION_ANSWER : 전화받기

    ACTION_PICK : 사용자가 선택한 항목을 가져옴

    ACTION_CHOOSER : 사용자가 선택할 수 있는 인텐트 표시

    ACTION_MAIN : 애플리케이션의 메인 액티비티 시작

    ACTION_DIAL : 주어진 전화번호 다이얼

    ACTION_CALL : 주어진 전화번호로 전화를 검

    ACTION_SEARCH : 검색 쿼리 실행

    등등

    필요에 따라 API 레퍼런스 확인해서 적절한 액션을 찾아야할듯

  2. 인텐트 액션을 따로 내가 만들어서 쓰기도 하나?

    →표준 액션 외에 사용자 정의 액션 정의가능

    →동일한 개발자가 만든 여러 앱간의 통신을 위해서는 커스텀 인텐트액션을 만들어서 사용할 수도 있다~~

    → 만약 다른 개발자와 커스텀 액션을 공유하고싶으면, 문서화해서 README파일이나 API문서에 해당 정보를 포함시켜서 설명하기도 함

액티비티 생명주기

Activity launched : 새로운 Activity가 시작될 때 호출

  • onCreate() : Activity가 처음 생성될 때 호출. 초기설정, 레이아웃 설정을 함
  • onStart() : Activity가 사용자에게 보이기 시작할 때 호출
  • onResume() Activity가 사용자와 상호작용할 준비가 되었을 때 호출

Activity running : Activity가 현재 실행중이고 사용자와 상호작용 하고있는 상태

Another activity comes into foregound : 다른 Activity가 Foreground로 올라오면 현재 Activity가 백그라운드로 이동

  • onPause() : Activity가 포커스를 가지지 않지만 여전히 보이는 상태일 때 호출. 데이터 저장 및 애니메이션 일시정지 같은 작업
  • onStop() : Activity가 더이상 사용자에게 보이지 않을 때 호출 UI관련 리소스를 해제하거나 더이상 필요하지 않은 작업 중지

User returns to the activity : 사용자가 다시 해당 액티비티로 돌아오면 호출

  • onRestart() : Activity 가 중지된 상태에서 다시 시작될 때 호출
  • onStart() : Activity가 다시 사용자에게 보이기 시작할 때 호출
  • onResume() : Activity가 사용자와 상호작용할 준비가 되었을 때 호출

The activity is finishing or being destroyed by the system : Activity가 종료되거나 시스템에 의해 파괴될 때 호출

  • onDestroy() : Activity가 완전히 종료되기 전에 호출. 자원을 해제하고 정리작업을 수행

Activity shut down : Activity가 완전히 종료된 상태

App process killed : 시스템이 메모리를 필요로 할 때 앱 프로세스를 종료시킬 수 있음

액티비티의 수명

onCreate() 호출과 onDestroy()호출 동안

액티비티 화면이 눈에 보이게되는 Visibility

onStart() ~ onStop() 호출 사이동안 사용자가 액티비티를 화면에서 보고 상호작용 할 수 있음

액티비티가 foreground에서 동작하는 구간

onResume() ~ onPause() 호출 사이에는 해당 액티비티가 다른 모든 액티비티 앞에 표시

수명주기 콜백 메서드

액티비티가 생성되면서 해제될 때 까지 액티비티 상태에 따라서 불려지는 메서드

개발자가 필요에 따라 콜백 메서드를 재정의하여 필요한일을 수행하게 할 수 있음

액티비티 수명주기에 따른 상태 시각적으로 정리

콜백 메서드 생성 방법

  1. 콜백 메서드 생성하고싶은 위치에 두고 오른쪽마우스 클릭으로 Generate 실행
  2. Override Methods 메뉴 선택하고 생성하고싶은 메서드 선택

과제

⏲️ 공부시간 15 : 10 ~ 18 : 15

1. 기획

UI 어떻게 만들지 고민하면서 레퍼런스 찾아보고

시작하기전에 필요한 것들 준비했음!

앱이름은 오리너구리 월드로 하고,

심플하고 미니멀한 컨셉으로 가야겠다고 생각했음

원래 로고를 사용할까 했는데,

UI 레퍼런스를 찾아보다가 보니

컬러를 전체적으로 무채색만 사용하고,

라인아트로 된 이미지가 들어가면 컨셉이랑 잘 어울리겠다고 생각했음

폰트는 국룰폰트 Pretendard로 정함!

2. 소스 이미지 제작

심플하고 미니멀한 컨셉이기 때문에

계산기 앱처럼 버튼 따로 디자인안하고 안드로이드 스튜디오에서 구현해도 될 것 같아서

오리너구리를 라인아트로 그린 일러스트만 제작했다

제작한 일러스트!

일러스트 툴을 사용해서 만들어서 PNG로 뽑아놨당

그리고 혹시 로고가 필요하다면 계산기때 만들어놨던 로고로 사용할 예정!

3. 페이지 UI 구상

시간이 널널해서 폰트 밸류나 색상 정할겸 일러스트로 페이지를 미리 만들어봤다.

블랙/화이트 랑 미니멀 컨셉이 잘 살려지는게 좋겠다고 생각하면서 만들었는데

지금 또 다시보니까 정보보는 페이지에 네모박스가 회색이라 혼자 안어울리는 것 같음

실제로 제작할 때는 바꿔야할듯?

일러스트 너무 대충 그려서 좀 타자치는 오리너구리에 키보드가 너무 튀는거같지만 일단은 그대로 진행하고 과제 끝나고 시간이되면 수정하던가 해야겠음

아무튼 페이지 만들어보면서 어느정도 폰트 밸류를 정했당!

font : Pretendard

Title : 72pt , ExtraBold 자간 10 black #000000

굵은 글씨 : 40pt, Bold 자간 50

연한 글씨 : 40pt, Light #777777

Button글씨 : 50 pt, Regular

근데 왤캐 크게해야하지???원래 모바일 폰트 저렇게 안클텐데 ?

나 대지 사이즈 폰 크기로 해놓고했는디? 먼가 잘못된거같다.

스튜디오에서 작업시작하고 폰트크기부터 확인해봐야겠음

profile
오리너구리입니다

0개의 댓글