일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Behavior
- CustomView
- hilt
- 알고리즘
- room
- activity
- kotlin
- onMeasure
- AppBarLayout
- DataBinding
- Coroutine
- onLayout
- LiveData
- Android
- 안드로이드
- notification
- 알림
- ViewModel
- Algorithm
- Navigation
- HTTP
- recyclerview
- View
- CoordinatorLayout
- CollapsingToolbarLayout
- lifecycle
- 코틀린
- BOJ
- sqlite
- 백준
- Today
- Total
목록안드로이드 (95)
개발일지
알람 앱을 실행 후 MainActivity에서 AlarmActivity로 이동했고 홈 버튼을 눌러 태스크를 백그라운드로 보냈다. 그리고 알람에 맞춰 AlarmDialogActivity가 실행됐다. 그렇다면 AlarmDialogActivity가 백그라운드에 있는 태스크에 속하게 됩니다. 태스크를 포그라운드로 불러오고 백 버튼을 누르면 AlarmDialogActivity에서 어떤 Activity로 가야할까요? 이러한 규칙은 launchMode로 설정할 수 있고, Launch Mode는 manifest 또는 Intent로 설정할 수 있다. * 앱 실행히 하나의 Task가 생성되며 Launch Mode나 Intent를 통해 새로운 Task를 만들 수 있다. Manifest 설정 standard Activity를..
Broadcast Receiver Android에서 화면 켜짐, 핸드폰 켜짐, 문자 수신 등 시스템 이벤트가 발생했을 때 대처해야 하는 경우가 있다. Broadcast Receiver를 사용하여 이벤트를 수신할 수 있습니다. Broadcast Receiver를 사용할 때 주의할 점은 리소스 관리입니다. Broadcast Receiver는 등록되면 계속해서 이벤트를 수신하고 동작하며 이는 메인 쓰레드에서 작업을 진행합니다(Handler를 따로 설정할 수 있지만 Default 값은 메인). -> Broadcast Receiver에서 작업 처리가 오래 걸리는 경우 ANR이 발생할 수 있다. * 시스템앱뿐만 아니라 다른 앱에서도 발생한 ACTION을 수신할 수 있습니다. * Oreo 이후부터 백그라운드에 제한이..
Service 어플리케이션이 종료되도 작업을 유지할 수 있는 요소(Android 4대 Component 중 하나이다.)이다. 크게 Background와 Foreground, Bind로 나눌 수 있습니다. Background는 UI가 제공되지 않고 Foreground는 Notification으로 UI가 제공되며 Bind는 Binder로 Service와 통신할 수 있습니다. * Oreo 이상에서 베터리에 대한 규제가 강화되면서 Background Service를 사용하기 어렵습니다. https://developer.android.com/about/versions/oreo/background?hl=ko#services -> 앱 종료시 Background 종료됩니다. * Service를 생성해도 내부적으로 새로..
Fragment는 Activity에서 UI 일부를 나타냅니다. 하나의 Activity에서 여러 Fragment를 사용하여 UI를 구축할 수 있으며, 여러 Activity에서 Fragment가 재사용될 수 있습니다. Fragment는 Activity처럼 사용자에게 입력을 받고 생명주기를 가집니다. 즉 Activity를 모듈화한 것으로 생각하면 됩니다. Fragment의 생명주기는 Activity 생명주기에 영향을 받습니다. (Activity가 PAUSE 상태고 들어가면 Fragment도 PAUSE 상태로 들어가고, Activity가 DESTROY되면 Fragment도 DESTROY됩니다.) Fragment는 FragmentManager로 관리되며 FragmentManager를 좀 더 간편하게 사용하기 위해..
Android에서 ConstraintLayout의 Group 기능을 사용하면 쓸데없는 ViewGroup을 줄일 수 있다. ex) 한번에 여러 View의 Visible를 관리할 때 새로운 ViewGroup을 만들어서 ViewGroup하나로 관리할 수 있지만 쓸데없는 ViewGroup이 늘어나며 성능에 영향을 줄 수 있다. 하지만 ConstraintLayout의 Group 기능을 사용할 경우 Group에 Tag 또는 Id로 View를 매핑하여 쉽게 관리할 수 있다. Group기능을 제대로 사용하기 위해선 매핑되는 View들의 Id가 정의되어야 한다. id를 정의하지 않은 View는 Group의 기능을 제대로 사용할 수 없다.
Android에서 Jetpack Navigation Component를 사용할 때 Global Action을 RecyclerView ViewHolder에서 바로 findNavController를 사용하는 경우 종종 does not have a NavController set Exception이 발생한다. * Dialog에서 RecyclerView를 사용하는 경우 자주 발생한다. itemView.findNavController() 위에 문제를 발생하는 코드를 아래로 고치자. Navigation.findNavController(activity, R.id.nav_host) Hilt를 사용하여 DI 패턴을 적용하면 RecyclerViewAdapter에서 Activity나 Fragment를 쉽게 가져올 수 있다.
RecyclerView Selection에서 선택한 ViewHolder의 키 값을 가져오기 위해 ItemKeyProvider를 사용한다. 보통의 경우 StableIdKeyProvider를 사용할 수 있다. 하지만 StableIdKeyProvider은 내부적으로 Cache 기능을 사용하기 때문에 Selection이 등록된 후 Item을 제거하는 기능을 사용하면 내부적으로 동기화가 되지 않는다. E/AndroidRuntime: FATAL EXCEPTION: main Process: com.taetae98.qrreader, PID: 30548 java.lang.IllegalArgumentException at androidx.core.util.Preconditions.checkArgument(Precondit..
Span Span은 TextView에 텍스트를 표현할 때 스타일을 입힐 수 있도록 도와줍니다. 예를 들면 색상, 크기, 폰트 등 다양한 옵션이 존재합니다. Span Class Span에 관련된 Class가 여러개 존재하며 상황에 맞게 효율적인 Class를 선택하여 사용해야 합니다. Class Edit Text Edit Span 데이터 구조 SpannedString NO NO Array SpannableString NO YES Array SpannableStringBuilder YES YES List Span을 생성하고 어떠한 수정이 발생하지 않으면 SpannedString을 사용합니다. Text를 변경하지 않으며 적은 수의 Span을 변경하면 SpannableString을 사용합니다. Text의 변경 또..