Android
-
Managing Threads and Custom ServicesAndroid 2022. 2. 4. 18:21
Managing Threads and Custom Services을 요약, 정리하였다. Understanding the Main Thread application이 시작되면 시스템은 main이라고 하는 application 실행 스레드를 생성한다. 이 스레드는 이벤트를 전달하고 사용자 인터페이스를 렌더링하는 역할을 하기 때문에 매우 중요하며 일반적으로 UI 스레드라고 한다. 모든 구성 요소(activities, services 등)와 실행 코드는 동일한 프로세스에서 실행되며 기본적으로 UI 스레드에서 인스턴스화된다. UI 스레드에서 네트워크 액세스 또는 데이터베이스 쿼리와 같은 긴 작업을 수행하면 전체 앱 UI가 응답하지 않는다. UI 스레드가 차단되면 그리기 이벤트를 포함하여 이벤트를 전달할 수 없다...
-
data binding : providing values in Include layoutAndroid 2021. 11. 5. 08:46
Data object data class Location( @field:SerializedName("name") val name:String, ) Binding Data override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding: ActivityMainBinding = DataBindingUtil.setContentView( this, R.layout.activity_main) binding.location = Location("Seoul") } Includes layout xml에 xmlns:bind="http://schemas.android.com/apk/res-auto"를 추가한다..
-
WorkManager(1)Android 2021. 10. 4. 20:35
WorkManager는 앱이 종료되거나 기기가 다시 시작되더라도 실행될 것으로 예상되는 신뢰할 수 있는 비동기 작업을 쉽게 예약할 수 있게 해주는 API이다. WorkManager API는 FirebaseJobDispatcher, GcmNetworkManager, JobScheduler를 비롯한 모든 이전 Android 백그라운드 예약 API를 대체할 수 있는 적합하고 권장되는 API이다. WorkManager는 API 수준 14와 역호환되는 일관된 최신 API에 이전 기능을 통합하면서 배터리 수명도 개선한다. 내부적으로 WorkManager에서는 다음 기준에 따라 기본 작업 전달 서비스를 사용한다. 참고: 앱에서 Android 10(API 수준 29) 이상을 타겟팅하는 경우 FirebaseJobDisp..
-
FragmentAndroid 2021. 8. 16. 11:28
프래그먼트 장단점 프래그먼트 장점 퍼포먼스 - Activity보다 상대적으로 가볍다 - Activity내에서 Fragment는 상대적으로 가볍게 추가/제거가 가능하다. Fragment 백스택에서 Fragment를 관리하는 것이 메모리 관리면에서도 효율적이며, 화면 전환도 Activity보다 더 순조롭게 할 수 있다. 유연한 UI/UX 구현 - Fragment는 기본적으로 큰 화면에서 역동적이고 유연한 UI 디자인을 지원하는 것이 목적이었다. - NavigationDrawer, BottomSheetDialog, Navigation Component 등을 구현할 때도 사용된다. 재사용성의 증가 - View or Business Logic을 Fragment 단위로 분리 가능하다. 프래그먼트 단점 비동기로 인해..
-
Replace findViewById with View BindingAndroid 2021. 8. 6. 12:57
View Binding 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있다. (대부분의 경우 view binding으로 findViewById가 대체 가능하다) View Binding은 Android Studio 3.6 Canary 11 이상에서 사용할 수 있다. 설정 build.gradle(module:app) 파일에 kotlin-android-extensions 플러그인을 삭제하고 다음 dependencies를 추가한다. android { ... buildFeatures.viewBinding true } binding class를 생성하는 동안 레이아웃 파일을 무시하려면 tools:viewBindingIgnore="true" 속성을 레이아웃 파일의 root view에 추가한다. 사용 모듈에..
-
ANR(Application Not Responding)Android 2021. 7. 19. 10:29
ANR 메세지는 어느 동작에서 메인 스레드를 오랫동안 점유하고 있다는 의미이다. 다음 조건 중 하나가 발생하면 앱과 관련한 ANR이 트리거 된다. Activity가 foreground인 경우 input event(예 : 키 누름 또는 화면 터치 이벤트) 또는 Broadcast Receiver에 5초 이내 응답하지 않은 경우 foreground에 activity가 없을 때 Broadcast Receiver가 상당한 시간 내에 실행을 완료하지 못한 경우 ANR Timeout ANR 타임아웃을 프레임워크 소스에서 확인해보면 아래와 같다. // How long we allow a receiver to run before giving up on it. static final int BROADCAST_FG_TIME..
-
ViewPager2Android 2021. 7. 10. 14:55
ViewPager2 새로운 기능 세로 방향 페이징 지원 - android:orientation="vertical" 속성을 설정, 혹은 setOrientation() 메서드를 사용하여 세로 페이징을 설정할 수 있다. 오른쪽에서 왼쪽 지원 - android:layoutDirection="rtl" 속성을 설정, 혹은 setLayoutDirection() 메서드를 사용하여 설정할 수 있다. - RTL페이징은 언어에 따라 해당하는 경우 자동으로 설정 수정 가능한 프래그먼트 컬렉션 - 기본 컬렉션이 변경되면 notifyDatasetChanged()를 호출하여 UI를 업데이트한다. DiffUtil Class 엑세스 가능 - RecyclerView를 기반으로 빌드되므로 DiffUtil 유틸리티 클래스 엑세스 가능하다...
-
Tests App on Android(2) - RobolectricAndroid 2021. 7. 1. 08:35
Robolectric은 먼저 Gradle을 권장하고 (Android Studio에서 선택한 빌드 시스템이므로) 두 번째로 Bazel을 권장한다. Robolectric은 Android Studio 및 Android Gradle 플러그인 3.2.1 이상에서 가장 잘 작동한다. build.gradle 파일에 다음을 추가한다. android { testOptions { unitTests { includeAndroidResources = true } } } dependencies { testImplementation 'org.robolectric:robolectric:4.4' } Android 스튜디오 3.3 미만에서는 gradle.properties에 다음 줄을 추가한다 android.enableUnitTest..