Android 31

[Android] @IgnoredOnParcel

통신을 위해 model을 설계했는데, 클라이언트에서만 사용하는 변수가 필요한 상황입니다 클라이언트에서만 사용될 값을 추가하는데, 만약 이게 서버 통신에서 쓰인다면.. 아찔한 상황입니다 T_T 이럴 경우엔, IgnoredOnParcel 을 사용합니다 @IgnoredOnParcel - Parcelize annotation이랑 함께 사용되는데 특정 필드가 Parcelable 구현에서 제외시킵니다 즉 Parcelable 인터페이스를 구현할 때 고려되지 않으므로, 인텐트에 데이터를 넘기거나 상태를 저장/복원하는 과정에서 이 변수는 무시되고, 클라이언트 상에서만 사용할 수 있습니다 :) @Parcelize data class User( val name: String, val age: Int, @IgnoredOnPa..

📱 Android 2024.02.25

[Android] 4대 Component

Component Application의 구성 요소입니다 Manifest 파일에 등록 필수 🔍 시스템에 컴포넌트를 알려야하기 때문에 일반 클래스와의 차이 일반 클래스: 생명주기 관리 개발자 코드 컴포넌트 클래스 : 안드로이드 시스템에서 생명주기 관리 또, 앱 안에서 독립된 실행단위로 이로 인해 안드로이드는 앱 실행 시점이 다양합니다 안드로이드에선 4개의 Component가 존재하는데, 각각 Component들에 알아보겠습니다 생성방법이나 사용법에 대해선 자세히 다루진 않겠습니다 😭 1. Activity 화면을 구성하고 사용자와 상호작용을 담당하는 컴포넌트 2. Broadcast Receiver 시스템에 어떤 이벤트가 발생 (ex.부팅, 배터리상태, 화면 On/Off)하면 실행되는 컴포넌트 Broadcas..

📱 Android 2022.07.05

[Android] Pattern (MVC, MVP, MVVM)

MVC Model, View, Controller로 구성 🔍 Model - 비즈니스 로직 및 데이터를 다루는 영역 ex) POJO 클래스, SQLite, Room, Realm 🔍 View - 사용자에게 보이는 영역 - Model로 부터 얻은 데이터 표시 ex) Activity, Fragment 🔍 Controller - 모델과 뷰에 의존 - 뷰로 부터 입력 받음 - 특정 이벤트 발생 시 뷰, 데이터 변경 가능 ex) Activity, Fragment 다이어그램 💬 MVC의 장점과 단점은 무엇일까? 장점 - 직관적이다 쉽게 말해 패턴을 몰라도 구조가 단순하고 직관적이라 쉽게 적용할 수 있다 단점 - 컨트롤러가 뷰, 모델에 의존적 -> 유닛테스트가 힘들다 - Fragment, Activity에서 Contro..

📱 Android 2022.05.30

[Dagger2] #1 DI 기본개념

안녕하세요 오랜만입니다 ㅎㅎ 오늘은 자주 사용되는 의존성 주입에 대해 정리해보고자 합니다 :) 함께 DI를 정복해봅시다!📚 ✅ DI (Dependency Injection) 의존성 주입의 개념과 필요성에 대해 알아봅시다 🔍 의존성 주입이란 ? - 구성요소간 의존관계가 소스코드 내부가 아닌, 외부를 통해 정의 예를 들어, 왼쪽은 A 객체에서 직접 B를 생성 오른쪽은 A 객체 외부에서 B를 생성 후 setter() 혹은 constructor를 통해 A에 주입 즉, 오른쪽과 같은 경우가 의존성 주입이 적용된 사례라고 생각하면 됩니다 여기서 객체를 생성하고 넘겨주는 외부 역할을 하는 것을 DI Framework 라 합니다 또한 객체의 생성 제어를 외부 Framework에서 담당하는 것을 IoC라 합니다 * IO..

📱 Android 2022.03.02

[Android] Notification

안드로이드 개발자라면 한번씩은 해봤을 Notification에 대해 정리해보겠습니다. 간략히 말하자면 Notification은 사용자에게 앱의 이벤트에 대한 정보를 제공하고, Builder를 통해서 생성해야합니다. NotificationChannel은 각 Notification들을 관리하는 것이라 생각하면 되는데, API 26 이상부턴 반드시 추가를 해줘야 Notification을 발생시킬 수 있습니다. 예제를 통해 더 자세히 알아보겠습니다 1. NotificationChannel 생성 val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager if (Build.VERSION.SDK_INT >..

📱 Android 2021.01.04

[Android] Timber 사용해보기

로그를 찍을 때마다 Log를 사용했었는데 Using 'Log' instead of 'Timber' Log를 사용하는 부분에서 위와 같은 메시지가 떴습니다 줄곧 Log만 사용하다가 Timber에 대해 궁금증이 생겨서 이에 대해 정리해보려고 합니다. 1. Timber ? 마찬가지로 로깅 클래스인데 , 기존에 사용하던 Log보다 더 간편하고 릴리즈할 때 로그가 노출될 걱정을 하지 않아도 됩니다. 다른 로깅 클래스와 마찬가지로 사용법은 어렵지 않습니다. 2. Timber 사용법 우선, 다른 라이브러리를 implementation 해줍니다. (build.gradle(:app)) implementation 'com.jakewharton.timber:timber:4.7.1' 그리고 Log.d를 사용할 때와는 달리 초..

📱 Android 2020.12.29

WindowManager$BadTokenException

Fatal Exception : android.view.WindowManager$BadTokenException Unable to add window — token android.view.VoewRootImpl@ is not valid; is your activity running? 이 에러가 지속해서 발생했는데 Firebase Crashlytics 에서 🔔 창 추가 불가 - 토큰이 올바르지 않음, 활동 실행 여부 확인 필요 이 비정상 종료는 대개 앱에서 이전에 완료된 활동을 컨텍스트로 사용하여 대화상자를 표시하려고 시도하여 발생합니다. 예를 들어 활동이 종료되면 대화상자를 표시하려고 시도하는 AsyncTask를 트리거하지만 사용자가 작업이 완료되기 전에 활동에서 뒤로 이동하면 발생할 수 있습니다. 비정..

🐛 버그 2020.12.15

[Android] getColor, getDrawable Deprecated 대응

Android 버전이 업데이트되면, 기존의 함수가 Deprecated가 되기도 합니다. Deprecated 된 함수들은 버전별로 처리를 해주어야 합니다. 이번에 살펴볼 함수는 getColor와 getDrawable 함수입니다. getColor public int getColor (int id) getColor는 마시멜로우버전(API 23)에서 부터 Deprecated(getColor)되었다고 나와있습니다. 공식 문서에 보면, getColor(int, android.content.res.Resources.Theme)를 대신해서 쓰라고 나와있습니다만, ContextCompat에 있는 아래의 함수를 사용해서 변경해보도록 하겠습니다. 설명처럼 Build.VERSION_CODES.M (API 23) 에서부터 사용..

📱 Android 2020.11.18

[Android] Firebase setCurrentScreen 지원중단

앞선 포스팅에 이어, Firebase SDK가 업데이트되면서 수동화면추적을 위한 setCurrentScreen도 곧 지원중단 되므로, 함수를 변경해주도록 합니다. 수동화면추적이란? 자동 추적 사용 설정 여부와 관계없이 screen_view 이벤트를 수동으로 로깅할 수 있습니다. 이러한 이벤트는 iOS의 경우 viewDidAppear상태, Android의 경우 onResume 상태에서 로깅할 수 있습니다. screen_class 를 설정하지 않으면 애널리틱스는 호출할 때 포커스가 지정된 UIViewController 또는 Activity를 기반으로 기본값을 설정합니다 앱을 사용하면서 화면전환율, 현재 화면에 관한 정보를 이벤트에 추적하면서 쓰입니다. 아래의 예시는 사용자가 어떤 화면에 들어왔는지를 남기기 ..

📱 Android 2020.11.09

[Android] 최신 Firebase Crashlytics Sdk 업데이트

공식문서 Firebase Crashlytics SDK로 업그레이드 iOS Android Unity 이제 새로운 공식 Firebase Crashlytics SDK를 사용하여 앱에서 Crashlytics를 설정할 수 있습니다. 이 SDK는 다른 Firebase 제품과의 일관성이 향상되었고 보다 직관적으로 사용할 수 있는 개선 firebase.google.com 위의 공식문서를 참고해서 정리해보겠습니다. (Android를 탭해도 IOS의 방법이 보이는 것 같습니다..) 1. Firebase 구성 파일 추가 프로젝트 설정에서 구성 파일이 필요한 ID를 선택합니다. google-services.json을 다운로드해서 프로젝트 app폴더에 넣어줍니다. 2. build.gradle (app) 수정 io.fabric이..

📱 Android 2020.11.05