Android/Reference

Service 안드로이드 4대 컴포넌트 중 하나이며 사용자에게 인터페이스를 제공하지 않고 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성요소 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있고, 다른 앱을 전환하더라도 백그라운드에서 계속 실행된다. 또한 앱 구성요소와 서비스를 바인딩하여 서비스와 상호작용 할 수 있고, 프로세스 간 통신(IPC)도 실행할 수 있다. 종류 Background Service 사용자에게 보이지 않는 백그라운드 작업을 수행하며, 시스템 리소스가 부족할 경우 강제 종료될 수 있다. API 25 이상부터는 앱이 Foreground에 있지 않을 때 백그라운드 서비스를 강제로 종료시킨다. Foreground Service 만약 서비스가 백그라운드에서 계속 돌게 ..
Backgorund 작업 구분 Background 작업으로 AlarmManager나 WorkManager, Coroutine을 사용할 수 있는데 공식 문서를 보면 사용 구분에 따라 어떠한 기술을 사용해야 할지 가이드라인을 제공하고 있다. 즉시 (Immediate) 사용자와 상호작용 요구 앱의 Scope 내부에서만 유요한: Coroutine, RxJava 앱 외부 Scope에서도 유요한: WorkManager 미디어나 스마트키 위젯에 유요한: Foreground Service 정시 (Exact) 사용자와 상호작용 요구하지 않음 정확한 시간에 작동해야함 AlarmManager 지연 (Deferred) 사용자와 상호작용 요구하지 않음 정확한 시간에 작동하지 않아도 됨 WorkManager 정확한 시간에 동작하..
사용자에게 미리 알림을 주고 다른 사람과의 소통을 가능하게 하며 앱에서 보내는 기타 정보를 적시에 제공하기 위해 Android가 앱의 UI 외부에 표시하는 메시지 Notification의 구성 전체적으로는 Notification 객체에 각종 정보를 담고 이 객체를 NotificationManager로 시스템에 등록하는 구조 SDK 33 이상부터는 Notification에 대한 권한 지정과 요청이 필요하다. (33 이상에서만 해당 권한 추가 가능) ... Manager NotificationManager : 알림을 시스템에 발생시키는 SystemService getSystemService() 함수를 이용하여 NotificationManager를 얻어서 사용하거나 NotificationManagerCompa..
안드로이드에서 단순한 데이터셋을 로컬에 저장하기 위해서 흔히 기본적으로 내장되어 있는 SharedPreferences를 사용한다. 하지만 Primitive data만 저장 가능했으며, 커스텀 데이터 타입 저장을 위해 GSON을 통해 Json String으로 변환하여 저장하는 코드들이 생겨났다. 그리고 미숙한 처리에 종종 Runtime Error, ANR이 날 수도 있다. SharedPreferences 단점 실제 XML 파일 I/O 작업을 하는 것으로 UI Thread에서 작업할 경우 안전하지 않음 Runtime Exception으로부터 안전하지 않음 XML 파일이기에 외부에서 쉽게 파일을 읽을 수 있음 (DataStore도 읽을 수는 있음) 비동기 API를 제공하지만 Listener를 통해서만 값을 R..
프로젝트를 진행하다 아래 사진처럼 하단에 존재하면서 스크롤을 하거나 터치할 때 올라오는 뷰가 필요해 BottomSheet를 찾아보았다. Bottom Sheet BottomSheet의 종류로는 Persistent BottomSheet와 Modal BottomSheet 이 있다. Persistent는 특정 화면의 레이아웃에 속해있고, Behavior를 설정해 주면 동작시킬 수 있다. 즉, 특정한 컨텐츠에 속해있는 또 다른 화면. Modal은 안드로이드의 Toast처럼 어디에서나 띄울 수 있다. 프래그먼트(BottomSheetDialogFragment) 이용 Persistent BottomSheet 프로젝트에 사용한 구현 방법으로는 Persistent BottomSheet이다. CoordinatorLayout..
프로젝트 중 리스트가 처음 항목들이 나타날 때 우측에서 차례대로 등장하는 모션을 구현해야 해서 layoutAnimation을 이용해 RecyclerView의 Item에 동작 모션을 주었다. 각 Item들에 지정할 Animation 생성 res/anim/anim_list_slide_in_right.xml //위치 //투명도 //크기 RecyclerView에 지정할 LayoutAnimation 생성 res/anim/anim_slide.xml RecyclerView에 LayoutAnimation 지정 Programmatically val anim = AnimationUtils.loadLayoutAnimation(requireContext(), R.anim.anim_quiz_slide) recentRecycle..
프로젝트 개발 중 RecyclerView로 리스트를 구성 후 각 Item의 간격을 조정해 줄 일이 있어 ItemDecoration을 사용하여 구현하였다. RecyclerView의 ItemDecoration Class를 생성 outRect의 left속성에 값을 지정해 주었다. class HorizontalSpaceDecoration(private val leftSpace: Int) : RecyclerView.ItemDecoration() { override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) { outRect.left = leftSpace } } RecyclerView에 I..
개발을 하다 보면 동적으로 View들의 위치를 옮겨주거나 크기를 변경하는 등 Layout이나 View들을 코드에서도 바꿔야 할 경우가 생긴다. 코드에서 지정하기 위해 LayoutParam을 사용한 것을 포스팅한다. LayoutParam은 부모 레이아웃 안에서 View(뷰)가 어떻게 배치될지를 정의하는 속성 구체적으로 레이아웃 XML파일에서 앞에 layout_""이 붙는 속성들을 말하며, LayoutParams 클래스의 필드값과 매핑된다. 따라서 코드 상에서 LayoutParams객체를 통해 뷰의 레이아웃 파라미터 속성을 다룰 수 있다. 위와 같은 xml파일에서 andorid:layout_width, andorid:layout_height 가 레이아웃 파라미터이다. LayoutParams 클래스 구조 Vi..
프로젝트를 진행하다 TextView의 text에 원하는 컬러로 외곽선을 그리게 구현해야 할 일이 생겼다. CustomView를 생성해 속성을 추가하여 Canvas로 그려 Text의 외곽선을 그리는 방법이 있어 구현해보았다. attrs.xml 생성 ... //외곽선 사용유무 속성 //외곽선 두께 - dp 사용위해 dimension //외곽선 컬러 CustomTextView 생성 class OutlineTextView : AppCompatTextView { private var stroke = false private var strokeWidth = 0.0f private var strokeColor = 0 constructor(context: Context?) : super(context!!) {} con..
bumjae
'Android/Reference' 카테고리의 글 목록