: 컴포넌트는 앱의 구성 단위이며, 컴포넌트 여러 개를 조합하여 하나의 앱을 만든다.
: 액티비티는 사용자와 상호작용하기 위한 진입점으로 즉, 애플리케이션에서 사용자에게 보여지는 화면을 담당하는 컴포넌트이다. 화면뿐만 아니라 화면에서 일어나는 사용자와의 상호작용도 액티비티가 관여한다.
사용자가 현재 관심을 가지고 있는 사항(화면에 표시된 것)을 추적하여 액티비티를 호스팅하는 프로세스를 시스템에서 계속 실행하도록 합니다.
이전에 사용한 프로세스에 사용자가 다시 찾을 만한 액티비티(중단된 액티비티)가 있다는 것을 알고, 해당 프로세스를 유지하는 데 더 높은 우선순위를 부여합니다.
앱이 프로세스를 종료하도록 도와서 이전 상태가 복원되는 동시에 사용자가 액티비티로 돌아갈 수 있게 합니다.
앱이 서로 사용자 플로우를 구현하고 시스템이 이러한 플로우를 조정하기 위한 수단을 제공합니다. (여기에서는 가장 기본적인 예시를 제시합니다.)
: 서비스는 여러 가지 이유로 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점으로 액티비티가 사용자와의 상호작용에 관여한다면, 서비스(Service)는 사용자가 볼 수 없는 백그라운드에서 작업을 하는 컴포넌트이다.
즉, 사용자가 아무런 상호작용을 하지 않으면서도 작업을 수행하고 싶을 때 필요한 컴포넌트가 서비스이다.
서비스는 백그라운드에서 항상 실행된 상태로 작업을 진행해야 한다. 따라서 서비스는 한 번 실행되면 종료되지 않고 계속 유지된다.
: 브로드캐스트(Broadcast)란, 메시지를 여러 객체에 전달하는 것을 말한다.(1 대 다)
(❗ 유니캐스트(Unicast)는 1 대 1)
EX - 앱이 사용자에게 예정된 이벤트에 대해 알리는 알림을 게시하기 위한 알람을 예약할 경우, 그 알람을 앱의 Broadcast Receiver에 전달하면 알람이 울릴 때까지 앱을 실행하고 있을 필요가 없습니다. 대다수의 브로드캐스트는 시스템에서 발생합니다. 예컨대 화면이 꺼졌거나 배터리가 부족하거나 사진을 캡처했다고 알리는 브로드캐스트가 대표적입니다.
ACTION_BOOT_COMPLETED
부팅이 끝났을 때 (RECEIVE_BOOT_COMPLETED 권한등록 필요)
ACTION_CAMERA_BUTTON
카메라 버튼이 눌렸을 때
ACTION_DATE_CHANGED
ACTION_TIME_CHANGED
폰의 날짜, 시간이 수동으로 변했을때 (설정에서 수정했을때)
ACTION_SCREEN_OFF
ACTION_SCREEN_ON
화면 on, off
ACTION_AIRPLANE_MODE_CHANGED
비행기 모드
ACTION_BATTERY_CHANGED
ACTION_BATTERY_LOW
ACTION_BATTERY_OKAY
배터리 상태변화
ACTION_PACKAGE_ADDED
ACTION_PACKAGE_CHANGED
ACTION_PACKAGE_DATA_CLEARED
ACTION_PACKAGE_INSTALL
ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_REPLACED
ACTION_PACKAGE_RESTARTED
어플 설치/제거
ACTION_POWER_CONNECTED
ACTION_POWER_DISCONNECTED
충전 관련
ACTION_REBOOT
ACTION_SHUTDOWN
재부팅/종료
ACTION_TIME_TICK
매분마다 수신
android.provider.Telephony.SMS_RECEIVED
sms 수신 (RECEIVE_SMS 권한 필요)
출처: https://itmir.tistory.com/424 [미르의 IT 정복기]
: 애플리케이션 사이에 데이터 공유가 가능하도록 하는 컴포넌트이다. 내용 제공자를 통해 주소록에 접근하거나, 갤러리에 접근이 가능하다. 콘텐츠 제공자는 파일 시스템, SQLite 데이터베이스, 기타 스토리지 등을 관리 및 제공한다.
EX - Android 시스템은 사용자의 연락처 정보를 관리하는 콘텐츠 제공자를 제공합니다.
적절한 권한을 가진 앱이라면 콘텐츠 제공자(예: ContactsContract.Data) 를 쿼리하여 특정한 인물에 대한 정보를 읽고 쓸 수 있습니다. 콘텐츠 제공자를 데이터베이스에 대한 추상화로 생각하기 쉽습니다.
이런 일반적인 사례에 대해 콘텐츠 제공자에 빌드된 API 및 지원이 많기 때문입니다.
다만 시스템 설계 관점에서 볼 때 핵심 목적이 서로 다릅니다.
시스템의 경우 콘텐츠 제공자는 URI 구성표로 식별되고 이름이 지정된 데이터 항목을 게시할 목적으로 앱에 진입하기 위한 입구입니다.
따라서 앱에서 URI 네임스페이스에 넣을 데이터를 매핑할 방식을 결정하고, 해당 URI를 다른 엔터티에 전달할 수 있습니다. 이를 전달받은 엔터티는 URI를 사용하여 데이터에 액세스합니다. 시스템이 이렇게 할 수 있는 데에는 앱 관리에 몇 가지 특별한 점이 있기 때문입니다.
: 위젯을 유연하게 배치하고 크기를 조정할 수 있는 보기 그룹
Q. ViewGroup(ConstraintLayout) 와 TextView 둘다 View를 상속을 받는데, ViewGroup 안에 다른 View 가 들어갈수 있고 TextView에는 들어갈수 없는가 ?
: ConstraintLayout은 ViewGroup을 상속 받고 있지만 내부적으로 View SparseArray을 만든다. 그래서 View 상속, ViewGroup 상속 여부는 크게 중요치 않고 내부적으로 사용할 수 있는 함수만 다르다.
❗ SparseArray ?
: integer 값을 Objects에 매핑하며, 일반 객체 배열과 달리 인덱스에 공백을 포함할 수 있는 배열. SparseArray는 자동 상자 키를 사용하지 않고 데이터 구조가 각 매핑에 대한 추가 항목 개체에 의존하지 않기 때문에 HashMap보다 메모리 효율성이 더 높다.
CompoundButton
: 선택 및 선택 취소된 두 가지 상태가 있는 버튼. (버튼을 누르거나 클릭하면 상태가 자동으로 변경)
ImageButton
: 사용자가 누르거나 클릭할 수 있는 이미지(텍스트 대신)가 있는 단추를 표시
RadioButton
: 선택 또는 선택 취소할 수 있는 두 가지 상태 버튼입니다. radio button을 선택하지 않은 경우 사용자가 누르거나 클릭하여 확인할 수 있습니다. 그러나 CheckBox와 달리 radio button은 한번 선택되면 사용자가 선택 취소할 수 없습니다.
ToggleButton
: 선택/선택 해제된 상태를 "라이트" 표시기가 있는 단추로 표시하며 기본적으로 "ON" 또는 "OFF" 텍스트가 함께 표시.
ZoomButton ( API 26 이상부터 사용가능 )
: 이 위젯은 길게 누르는 이벤트를 설정된 빈도로 일련의 클릭으로 전환하기 위한 간단한 유틸리티를 제공합니다. 이 위젯에서 직접 처리하는 실제 '줌' 기능은 없습니다. 대신, 이 API의 클라이언트는 확대/축소 기능을 처리하기 위해 onClickListener를 설정해야 합니다. 사용자가 줌 버튼을 길게 누를 때마다 setZoomSpeed(길이)에 의해 결정된 주파수에 따라 클릭 청취기가 호출됩니다.
ZoomButtonsController ( API 26 이상부터 사용가능 )
: 확대/축소 컨트롤을 표시하거나 숨기고 소유자 보기에 상대적으로 위치를 지정. 또한 클라이언트에 확대/축소 컨트롤 컨테이너에 대한 액세스 권한을 부여하여 확대/축소 컨트롤 창에 추가 액세서리 버튼을 표시할 수 있다.
Navigation
: 사용자의 상호작용에 따라 화면간의 이동을 구현하는데 도움을 줍니다. 해당 라이브러리를 사용하면 FragmentManager와 상호작용하지 않아도 된다.
Navigation 사용 방법
: theme.xml에서 사용
Primary : 기본 color
colorSecondary
: 앱에서의 두번째 브랜딩 색상 (secondary branding color), 주로 주요 브랜딩 색상(colorPrimary)을 좀 더 돋보이게 하기 위해서 사용 함
colorOn[Primary, Secondary, Surface etc]
: 각 이름들의 색상에 대비되는 색상
color[Primary, Secondary]
: Variant 각 이름들의 색상의 그림자
colorSurface
: 컴포넌트(카드, 시트, 메뉴 등)의 표면 색상.
colorBackground
: 스크린의 백그라운드.
colorPrimarySurface
: 라이트 테마에서는 colorPrimary이고, 다크테마에서는 colorSurface를 나타내는 색상.
colorError
: 에러를 표시하기 위한 색상.
colorControlNormal
: 아이콘 및 컨트롤의 보통 상태에 적용되는 색상.
colorControlActivated
: 아이콘/컨트롤이 활성화 상태일 때(예를 들어 체크박스가 체크되었을 때) 적용되는 색상
colorControlHighlight
: 컨트롤을 강조할 때 적용되는 색상(예를 들어 리플, 리스트에서 선택된 것)
textColorPrimary
: 가장 눈에 띄어야 할 텍스트 색상
textColorSecondary
: 두번째 텍스트 색상.
findViewByid
viewBinding
dataBinding
참고 : https://lotuslee.tistory.com/114, https://hckim999.tistory.com/33