본문 바로가기
반응형

분류 전체보기355

DataBinding에 대해서 알아보자 part1 오늘은 안드로이드 Architecture Component Library중의 하나인 DataBinding에 대해서 알아보도록 하겠습니다. 1. DataBinding DataBinding은 androidX 즉, jetpack에 포함되어 있는 라이브러리인데요. 레이아웃에 있는 View들을 data소스들과 바인딩 해주는 역할을 합니다. XML의 요소들을 단순히 Activity클래스에서 불러다가 쓰는 것이 아니라, XML안에서 expression들을 사용하면서, 자체적인 로직도 가질 수 있게 되는데요. View를 담당하는 컴포넌트들의 코드가 매우 간결해지고, 그에 따라 코드를 관리하거나 읽기가 쉬워집니다. 2. 라이브러리 셋업 특별히 implement할 것은 없구요. 아래와 같이 앱레벨의 build.gradle.. 2019. 12. 23.
Firebase Cloud Messaging 총정리 # push message 오늘은 푸쉬메시지라고 불렸던, Firebase Cloud Messaging, 줄여서 FCM에 대해서 정리해 보겠습니다. 1. FCM의 개념 B라는 사람에게 어떠한 메세지를 전달하는 데 있어서 아래와 같은 두가지 경우를 먼저 생각해 보겠습니다. 첫번째는, A가 B에게 개인적인 메세지를 전달하기 위해서, 앱을 사용하고, 서비스를 하는 회사의 서버를 거쳐서 B에게 가는 것 이구요. 두번째는, 앱에서 사용자에게 무엇인가 홍보하기 위해서, 서비스 회사의 서버에서 B에게 메세지를 보내는 것 인데요. 1. A->서버->B 2. 서버 ->B 그런데, 메세지를 실시간으로 전달받게 하려면, B는 서버에 계속 접속해 있어야 합니다. 이것은 실제로 구현한다면, 배터리나 네트워크 사용때문에 문제가 되겠지요. 그래서 이 중간에 .. 2019. 11. 7.
SoundPool 이용해서 다양한 사운드(효과음) 재생하기 #Android 안드로이드 앱을 개발하면서 동시에 여러가지 사운드를 플레이해야하는 경우가 있습니다. 이럴때는 mediaPlayer클래스를 사용하기보다는, SoundPool클래스를 사용해야 하는데요. 오늘은 이 SoundPool 클래스에 대해서 정리해 보도록 하겠습니다. 1. SoundPool 클래스 SoundPool클래스는 여러개의 음원을 미리 로딩해 놓고, 필요한 시간에 각각을 혹은 동시에 재생시킬 수 있는 장점이 있는 Class입니다. 이러한 장점때문에 아무래도 게임앱의 효과음이나 배경음을 재생하는데 많이 사용되는데요. 그럼 객체를 생성하는 방법부터 하나씩 알아보도록 하겠습니다. 1-1. 객체 생성 SoundPool클래스의 객체를 가져오기 위해서는 아래와 같이 해주면 되는데요. Lollopop이후 버전과 아닌 버전과.. 2019. 11. 5.
Kotlin으로 Android개발 하기 구글에서 "Kotlin First"를 말하기도 하였고, 공식문서도에서도 Kotlin을 예제로 보여주기도 하는 등, Kotlin의 시대라고 해도 과언이 아닌데요. 여전히 기존 Java프로젝트와 호환되지 않거나 특별한 방법을 추가해야 하는 경우도 있고, 혹은 Android 프레임워크의 특성상 Kotlin을 이용해, 더 쉽게 사용할 수 있는 방법들이 있는데요. 오늘은 Kotlin으로 Android를 개발하면서 알아야 하거나, 주의해야 할 부분들에 대해서 정리해 보겠습니다. 1. kapt Kotlin에서 Java의 Glide나 Dagger의 Annotation Processing을 사용하기 위해서는 kapt compiler plugin을 사용해야 하는데요. 특히나 Glide는 개인적으로는 모든 프로젝트에 사용되.. 2019. 10. 22.
ArrayIndexOutOfBoundsException과 ViewHolder의 getAdapterPosition사용 RecyclerView를 이용해서, list상의 아이템 중 하나를 유저가 클릭한 경우, 해당 View의 position을 알아오기 위해, ViewHolder에서 getAdapterPosition을 사용하는 경우가 있습니다. 이런 경우에 ArrayIndexOutOfBoundsException이 발생하는 경우가 있는데요. 오늘은 이것의 원인과 대응 방법을 정리해 보도록 하겠습니다. 1. ArrayIndexOutOfBoundsException의 원인 ViewHolder에서 getAdapterPostion()메소드를 호출 한 경우, 디폴트 값은 "RecyclerView.NO_POSITION"인데요. 이 값이 바로 "-1"입니다. getAdapterPosition메소드는, 아이템이 있을 경우에만 해당하는 posi.. 2019. 10. 18.
RxJava2의 Global Error Handler 대응 #UndeliverableException 오늘은 RxJava2의 Global Error Handler에 대해서 정리해 보도록 하겠습니다. 이 글은 UndeliverableException이 발생하는 케이스에 대응하는 방법이기도 한데요. 재현하기가 쉽지만은 않은 케이스입니다. 하지만, 프로덕트로 Playstore에 출시하게 되고, 다양한 기기와 상황에서에서는 언젠가는 마주치게 되는 Exceptoin이기도 합니다. 1. 문제 아래와 같이 이미 cancel되었거나 dispose되어서 consumer가 갈 곳이 없다고 나와있습니다. 무슨 Exception이길레, 해결할 방법에 대한 link까지 제공해 주고 있는 것일까요? 이것은 RxJava2로 업그레이드 하면서, 달라진 ErrorHandler를 적용하지 않아서 발생한 문제인데요. 이것이 무엇이고 왜 .. 2019. 10. 16.
LiveData와 Realm 그리고 ViewModel을 같이 이용하는 방법 Android Architecture 라이브러리가 나오고 LiveData의 등장하면서 Realm과 같이 하면, Reactive하면서도 Lifecycle에 대응가능하게 되었는데요. 오늘은 그 방법에 대해서 정리해 보고자 합니다. 1. Realm과 LiveData를 같이 사용하는 방법 이 둘을 같이 사용하기 위해서는, Realm의 결과 값을 listen하는 listener가 붙어있는 Wrapper클래스를 생성해서, listerner에서 그 결과값을 받으면, LiveData타입의 데이터를 set해주면 됩니다. 그럼 먼저 Realm을 initialize하는 것 부터 보도록 하겠습니다. 2. Realm initialize 먼저 아래와 같이 Application클래스에서 Realm을 initialize해 주었습니다.. 2019. 10. 14.
ViewModel에서 Coroutine을 이용하는 방법 #ViewModel Scope Coroutine을 안드로이드에서 사용한다고 했을 때, ViewModel에서 사용하면 매우 효율적인데요. 오늘은 Coroutine을 ViewModel에서 사용하는 방법에 대해서 정리해 보도록 하겠습니다. Coroutine에 관해 기본적인 내용들은 아래 링크를 참조해 주세요. >> Kotlin Coroutine에 대한 정리 1. ViewModel 과 Coroutine Coroutine도 더이상 작업이 필요하지 않거나 할 때, cancel을 적절히 해주어야 하는데요. 이럴 때 ViewModel과 연계되어 있으면, ViewModel의 라이프사이클에 맞추어, 쉽게 Coroutine도 관리할 수 있습니다. 예전 Coroutine에 관한 글에서도 정리하였지만, Coroutine의 관리 단위는 Scope입니다. Sc.. 2019. 10. 10.
Kotlin Coroutine에 대한 정리 이제 안드로이드 개발을 하면서, RxJava나 AsyncTask이외에도 다른 Thread로 작업을 할 수 있는 방법이 생겼는데요. 바로 Kotlin의 Coroutine입니다. Coroutine은 RxJava만큼 다양한 Operator를 제공해주지는 않지만, 심플하다는 면에서는 좀 더 좋은면이 있는 것 같습니다. 오늘은 이 Coroutine에 대해서 정리해 보도록 하겠습니다. 1. 라이브러리 implement 가장 먼저 해야할 것은 역시 Library설정인데요. Kotlin의 버전을 최신 버전으로 하구요. 아래와 같이 app레벨의 build.gradle에서 implement해 줍니다. 마치 rxjava와 rxandroid를 같이 implement했듯이, coroutine도 core와 android 라이브러.. 2019. 10. 9.
Kotlin에서 활용하는 Generic Java에서와 마찬가지로 Kotlin도 Genenric을 지원하는데요. 오늘은 Kotlin에서의 Generic에 대해 정리해 보겠습니다. 1. Class에서의 Generic Generic이라고 하는 것은, class 혹은 함수를 사용하는 시점에, class 또는 함수에서 사용할 타입을 지정할 수 있도록 하는 것 인데요. 코드를 보면서 알아보도록 하겠습니다. 아래 코드를 보면, 먼저 클래스이름 다음에 라는 타입을 정해서 붙여 주었는데요. 여기가 Generic타입을 정하는 위치입니다. Return값의 타입을 나타내는 곳과는 다른 곳 이지요. 클래스를 정의한 다음, Person클래스를 객체화 String혹은 Int로 객체화 하였는데요. 처음에는 외부에서 String이라는 타입을 정해 주고 "goodBoy"라는.. 2019. 10. 6.
APK 빌드 시 Lint found fatal errors 에러가 발생할 경우의 대응 테스트가 끝나고 Release빌드를 만들기 위해서, Signed APK를 빌드하다가 Lint found fatal errors를 만나는 경우가 있습니다. 오늘 글에서는 이 에러가 발생하는 경우의 대응 방법에 대해서 정리해 보도록 하겠습니다. 1. Lint Found Fatal Error 안드로이드 스튜디오는 Lint라는 코드 스캔 도구를 이용해서, 빌드시에 코드의 문제들을 찾아내 주는데요. 이 때 Fatal Error가 나는 경우가 있습니다. 이 때는 build리포트를 통해서 상세하게 해당내용을 알려주기 때문에 대응하기도 쉬운편인데요. 한가지 문제는 이 에러가 발생한 원인에 대한 Report를 어디서 찾느냐 인데요. 그것은 아래에서 보도록 하겠습니다. 2. Build Report 의 위치 lint가 찾아.. 2019. 10. 6.
Repository 패턴에 대해서 정리해 보겠습니다 MVVM 혹은 MVP에 대해서 알고 계신다면 Repository에 대해서 알고 계실텐데요. 오늘은 이 Repository패턴에 대해서 정리해 보겠습니다. 1. Repository 패턴과 MVVM Repository의 역할을 이해하기 위해서, MVVM에서의 Repository의 역할을 보며 정리해 보겠습니다. 아래의 표는 구글 공식사이트에 존재하는 도표인데요. 이것을 보면 Repository가 ViewModel과 Room이라고 하는 DB나 Retrofit사이에 있습니다. ViewModel이 Activity나 Fragment에 보여주려고 하는 데이터를 Repository에 요청하면 Repository가 요청한 데이터를 받아서 보내 준다는 것 입니다. 도표에서 느낄 수 있듯이 분업화가 매우 확실합니다. 데이터.. 2019. 10. 5.
Scope Function 총정리 # Kotlin also let run with apply 이번에는 Scope 함수 라는 것을 정리해 보고자 합니다. 이 함수들은, 객체의 컨텍스트를 유지하면서, 코드 블록을 받아서 실행시키는데요. let, apply, with, run, also 같이 종류가 무려 5개나 됩니다. 이 함수들은 대부분 중요해서 android개발하면서 계속 마주치게 되므로, 잘 정리해서 사용해 보는 것이 좋은데요. 이 글에서는 5가지 Scope함수와 더불어 함께 사용할 수 있는 함수인, takeIf그리고 takeUnless까지 같이 정리해 보겠습니다. 1. Scope Functions ScopeFunction이라는 함수명에서 알 수 있듯이, 이 함수들을 lambda식을 이용해서 호출하면, 일시적인 Scope(범위)가 생기게 됩니다. 이 범위안에서는 객체에 대해 "it" 혹은 "th.. 2019. 9. 29.
Kotlin을 배워보자 part5 # CompanionObject Object Expression and Declaration 지난 part4에서는 Data Class, Nested Class와 Inner클래스에 대해서 정리해 보았습니다. 이전 글은 아래링크를 클릭해주세요 >> Kotlin을 배워보자 part4 (Data Class, Nested and Inner Class) 이번 part5에서는 익명 inner class에 사용되는 Object Expression, Singleton패턴을 위한 Object Declaration 그리고 Java의 Static 함수를 대신하기 위해 사용하는 Companion Object 에 대해 정리해 보겠습니다. 1. Object Expression and Declaration 1-1. Object Expression Object Expression은 특정타입으로부터 상속받는 Anonymous .. 2019. 9. 28.
Kotlin을 배워보자 part4 (Data Class, Nested and Inner Class) 지난 part3에서는 Class와 생성자, 프로퍼티 그리고 상속 등에 대해서 정리해 보았는데요. 이번 글에서는 Data Class, Nested Class와 Inner클래스에 대해서 알아보도록 하겠습니다. 이전 글은 아래 링크를 참조해 주시면 됩니다. >> Kotlin을 배워보자 part3 (Class, Constructor, 상속) 1. Data Class 코틀린에서는 데이터만 보관하는 용도로 쓰는 클래스를 제공해 주고 있는데요. 선언하는 방법도 매우 간단한데요. data 키워드를 class 앞에 붙여주고 기본 생성자에서 1개 이상의 property를 선언해 주기만 하면 됩니다. 1-1. data클래스의 특징 data클래스임을 명시적으로 표시하면, 기본적으로 아래의 함수들을 자동으로 생성해 줍니다. 꽤.. 2019. 9. 27.
Kotlin을 배워보자 part3 (Class, Constructor, 상속) 벌써 kotlin에 대해 정리한 글의 part3가 되었네요. 이전 part2에서는 if, when, for, array, list, ranges에 대해서 정리해 보았는데요. 이번 글에서는 class와 생성자 그리고 상속에 대해서 정리해 보도록 하겠습니다. 혹시 이전글을 보시지 못한 분들은 아래 링크를 참조해 주세요. >> Kotlin을 배워보자 part2(if, when, for, while, array, list, ranges) 1. Class와 생성자 코틀린에서 클래스를 만들기 위해서 class라는 키워드를 사용하구요. 클래스의 객체를 생성할 때 Java에서 쓰던 new연산자는 사용하지 않습니다. 아래 코드에서는 자동차 클래스를 이용해 차 객체를 만들어 준 다음, 자동차를 생성할 때 같이 생성된 Ti.. 2019. 9. 26.
Kotlin 을 배워보자 part2(if, when, map, for, while, array, list, singleOrNull, ranges, return with label) 이전 글에서 변수선언 방법, Basic Types, Null, 함수, Interpolation, Lamdas, Type Check와 SmartCast 및 형변환에 대해서 정리해 보았는데요. 이번 글 에서는 if, when 등의 conditional과 for, array나 list, ranges에 대해서 다루도록 하겠습니다. 이번 글 이해를 위해서는 이전 글에서 다루고 있는 주제들에 대한 이해가 필요하니, 필요하신 분들은 아래 링크를 참조해 주세요. >> Kotlin을 배워보자 part1(Basic Types, Function, Null, 타입 변환, Lambda) 먼저 if문에 대해서 보도록 하겠습니다. 1. If if나 if else를 Java에서 사용하던 방법은 Kotlin에서도 동일한데요. 아래 이.. 2019. 9. 25.
Google Ads에 광고하는 방법 앱을 열심히 만들고 나서 광고하는 방법을 알아야 할 텐데요. 오늘은 Google Ads에 광고 캠페인을 만들어서 광고를 하는 방법을 정리해 보도록 하겠습니다. 1. 광고 캠페인 만들기 GoogleAds(ads.google.com/)‎ 에 회원가입을 거쳐서 들어가면 아래와 같은 화면을 볼 수 있습니다. 화면 가운데 동그란 플러스(+) 버튼이 보이실 텐데요. 이 버튼을 누르면 광고에 관한 캠페인을 만들고 실행시킬 수 있습니다. 가운데 동그란 버튼을 누르면 나오는 화면이 다음과 같은데요. 이제 다음과 같은 화면을 볼 수 있는데요. New Campaign을 선택해 줍니다. 그럼 아래와 같은 화면이 나오는데요. 두번째 열 가운데에 App promotion이 저희가 하고자 하는 것 입니다. 2019. 9. 25.
안드로이드 Build 속도를 개선하는 방법 앱을 개발하면서 다양한 라이브러리를 사용하게 되는데요. 이 라이브러리에는 쓰지않는 수많은 메소드까지 다 따라오게 됩니다. 그러면서 메소드카운트가 Java의 한계를 넘어서게 되구요. Minified를 해주던, MultiDex를 사용하던 해야하는 단계에 이르게 되면, 빌드속도가 엄청나게 느려지게 됩니다. 참고로 Multidex를 바로 사용하기 전에, Debug단계에서는 Minified를 사용해보는 것이 좋은데요. 이에 관한 글은 아래 링크를 참조해 주세요. https://developer88.tistory.com/167?category=219607 코드 몇줄 수정했는데 1분 가까이 빌드가 걸린다면, 개발 의욕도 저하될텐데요. 오늘은 어떻게 하면 Build속도를 빠르게 할 수 있는지 그 방법들을 정리해 보도록.. 2019. 9. 24.
Kotlin을 배워보자 part1(Basic Types, Function, Null, 타입 변환, Lambda, 고차함수, Elvis, inline) 2017년 5월에 공식적으로 안드로이드 언어로 채택된 Kotlin은, Java의 virtual Machine인 JVM에서 동작하는 컴파일 언어입니다. 2019 IO를 보면 Kotlin First, Kotlin/Everywhere라는 단어가 보입니다. 구글의 안드로이드 공식문서에서도 Java보다 kotlin 예제코드를 먼저 보여주기 시작 했구요. 점점 많은 개발자들이 안드로이드의 실제 프로덕트에 적용하며 추천하고 있기도 합니다. 이러한 Kotlin에 대해서, 이번 글을 시작으로 5part에 걸쳐 정리해 보겠습니다. 그럼 가장 먼저 변수선언에 대해서 정리해 보도록 하겠습니다. 1. 변수 선언을 위한 val과 var 변수 혹은 상수를 선언하는 방법에 대해서 알아보도록 할텐데요. Java에서는 상수의 경우 fi.. 2019. 9. 24.
Android Gradle Tip들 정리 오늘은 Android의 Gradle의 좋은 팁들을 정리해 보고자 합니다. 1. BuildConfig상수 이용하기 안드로이드에서 글로벌한 상수의 경우, Constants파일을 하나 만들어서, static타입으로 정의해서 사용하는데요. 그런데 만약 해당 상수가 build타입에 따라 값이 다를때는 어떻게 해야 할까요? 이럴 경우에는 Build.gradle에서 BuildTypes의 하위에 있는, debug와 release에서 각각 다른 값을 설정해서 가져올 수 있습니다. 만약 아래와 같이 Build.gradle에서 상수를 정의했다고 가정해보겠습니다. 핵심은 buildConfigField 부분인데요. debug빌드에서는 IS_FOR_TEST와 NAME_FOR_TEST의 값들을 true와 tester_debug로 .. 2019. 9. 22.
Android Checkbox에 Custom 이미지 사용하기 안드로이드 UI작업을 하다보면, Checkbox를 Custom 이미지를 사용해야할 경우가 정말 많습니다. 오늘은 어떻게 해야하는지 정리해 보도록 하겠습니다. 1. Checkbox의 HierArchy Custom 이미지의 구현에 대해 보기 전에, CheckBox의 HierArchy를 보도록 하겠습니다. 아래 이미지에서, Button 클래스를 상속받고 있는 부분이 보이시나요? 커스텀하게 CheckBox를 사용하기 위해서는 이 Button 속성을 이용하는 것이 핵심인데요. CheckBox가 Button을 상속하기 때문에 가능한 것 입니다. 핵심을 알았으니, 구현만 해주면 되겠네요. 구현에 필요한 Selector부터 만들어 보겠습니다. 2. Selector 생성 checkbox의 핵심은 checked의 stat.. 2019. 9. 18.
Java에서 랜덤 함수를 이용해 난수 얻기 프로젝트를 하다 보면, 랜덤하게 무언가를 출력해주어야 할 때가 있습니다. 프로젝트에서 바로 사용 하려면 갑자기 생각이 않나기도 하는데요. 오늘은 Java의 랜덤 함수를 이용해 난수를 얻는 방법에 대해서 정리해 보도록 하겠습니다. 1. 자바의 Random함수 Java에서는 Random한 결과값을 얻기 위해 두가지 클래스에서 함수들을 사용할 수 있는데요. Random클래스의 멤버함수와 Math클래스의 멤버함수 입니다. 먼저 Random 클래스를 보도록 하겠습니다. 2. Random클래스 아무래도 Math클래스보다는 Random에 전문적인 class 이름이기는 한데요. java.util패키지의 Random클래스를 import해 주어야 사용할 수 있습니다. Random클래스의 객체를 생성한 다음, 멤버 함수들을.. 2019. 9. 13.
안드로이드 Webp이용해 이미지 용량 줄이는 방법 앱을 만들면서 마지막에 신경쓰이는 부분이 바로 앱의 용량입니다. 너무 커지면 유저입장에서 lte등으로 통신비를 내면서까지 다운로드 받으려고 하지 않기도 하고, 설치하는데 기다리는 시간이 오래 걸리기 때문인데요. 오늘은 안드로이드 스튜디오를 이용해서, 이미지 파일을 Webp로 전환하는 방법에 대해서 정리해 보도록 하겠습니다. 1. Webp 이미지 파일 Webp는 Google에서 만든 이미지 파일형식입니다. 구글님이 만드셨으니 당연히 안드로이드와 안드로이드 스튜디오에서 사용이 가능합니다. 이런저런 거창한 알고리즘 보다는 기존의 png나 jpg보다 얼마나 사이즈를 줄일 수 있느냐가 중요한데요. 약 70%까지도 줄일 수 있다고 하는군요. 2. 손실 압축 방식과 무손실 압축 방식 webp는 JPEG와 같은 손실압.. 2019. 9. 9.
Mp3파일 외부 저장소에서 가져와 재생하기 #안드로이드 유저가 가지고 있는 MP3파일을 앱 내부에 저장해 두고 필요할 때 재생할 수 있도록 할 경우가 있는데요. 오늘은 외부 저장소에 있는 MP3파일들 중 하나를 선택한 다음, 그 파일을 내부 저장소로 가져와 파일을 재생하는 방법을 정리하도록 하겠습니다. 이 방법에 대해서 정리하기 전에, 저장소에 대한 개념을 가볍게 정리해 보고 가려고 합니다. 이에 대한 개념이 필요하시지 않은 분들은 바로 3번으로 넘어가 주세요. 1. 저장소(Storage) 안드로이드의 Storage의 개념에서 크게 두가지가 있는데요. 바로 내부저장소(Internal Storage)와 외부 저장소(External Storage)입니다. 더 세부적으로 구분할 수도 있겠지만, 오늘 글에 대해서 접근하는데 있어서는 이 개념들이 중요할 것 같습니다... 2019. 9. 7.
ADB(Android Debug Bridge)를 맥 OS에서 사용하는 방법 맥에서 개발하면서 ADB를 사용하려고 하는데, 어떻게 접근하면 되는지 막막할 수 있는데요. 오늘은 손쉽게 adb를 설치하고 사용하는 방법에 대해서 정리해 보도록 하겠습니다. 1. ADB(Android Debug Bridge) Android 디버그 브리지는 앱을 개발하면서 연결된 휴대폰이나 에뮬레이터와 통신할 수 있는 유용한 도구입니다. 예를 들면 저 같은 경우 알람앱을 만들고 얼마나 많은 알람이 휴대폰에 등록되었는지 등을 확인하는데 사용하였는데요. 이에도 활용용도가 매우 많아서 디버깅 하는데 많은 도움이 됩니다. 2. ADB가 설치된 위치 ADB는 어디에 있는걸까요? adb 도구는 android_sdk/platform-tools/ 폴더에 위치하고 있습니다. 그럼 android_sdk폴더는 어디에 위치해 .. 2019. 9. 1.
PendingIntent 의 Flag 사용할 때 주의할 점 알람을 사용하던, Receiver를 사용하던, Service를 호출하던 우리는 PendingIntent를 사용하게 됩니다. 이 때 항상 Flag를 설정해 주게 되는데요. 오늘은 이 Flag사용시 주의할 점에 대해서 정리해 보도록 하겠습니다. 1. PendingIntent Flag의 종류 선택할 수 있는 Flag의 종류는 아래의 이미지와 같습니다. 하나하나 보면 다음과 같은데요. FLAG_UPDATE_CURRENT : Pending인텐트가 이미 존재할 경우, Extra Data를 모두 대체 FLAG_CANCEL_CURRENT : Pending인텐트가 이미 존재할 경우, 기존 Pending인텐트를 cancel하고 다시 생성 FLAG_IMMUTABLE : 이름에서 알 수 있듯이, 기존 PendingIntent.. 2019. 8. 28.
DialogFragment 사이즈 조정 및 타이틀 제거 개발을 하면서 DialogFragment를 좀 더 커스텀하게 사용해야 할 때가 있는데요. 그 중에서도 사이즈 및 타이틀이 있고 없는 부분은 디자인상 중요한 부분인데요. 오늘은 어떻게 하면 이러한 부분을 수정할 수 있는지 정리해 보도록 하겟습니다. 참고로 Dialog Fragment의 기본적인 부분은 아래링크를 참조해 주세요. FragmentDialog 로 대화상자(팝업) 구현하기 1. DialogFragment 사이즈 조정하기 DialogFragment의 가로세로 사이즈를 조정하기 위해서는, onResume에서 window객체를 얻어와서 setLayout메소드를 사용해 주면 되는데요. onResume에서 아래와 같이 해 주면 됩니다. 2. DialogFragment 타이틀 제거 상단 타이틀을 제거하는 방.. 2019. 8. 26.
Kotlin(코틀린)의 Sequence에 대해 알아보자 Kotlin에서 List를 사용하는 경우 map이나 filter등의 메소드를 이용해서 원하는 결과를 쉽게 얻을 수 있는데요. 퍼포먼스 측면에서 한가지 생각해야 할 점이 있습니다. 함수를 거칠 때 마다, 매번 list가 연산되어서 반환되기 때문에, list아이템이 매우 많을 경우, 메소드를 거칠 수록 처리에 대한 부담이 커지게 되는 것인데요. 그런데, sequence의 경우는 lazy하게 최종 메소드가 실행될 때 전체가 실행되어 집니다. 따라서 list에서 iterator가 하듯, 매번 list를 반환에서 넘겨주지 않아도 되므로, 부하가 적어지게 되는 것인데요. 오늘은 이 Sequence에 대해서 정리해 보도록 하겠습니다. 1. Sequence Sequence를 생성하기 위해서는 아래와 같은 방법을 사용하.. 2019. 8. 16.
BuildConfig 와 ProductFlavor 정리 # BuildTypes BuildConfigField 오늘은 BuildConfig와 ProductFlavor에 대해서 정리해 보고자 하는데요. 이 두가지 클래스들은 각각 빌드별로 다른 값을 가지거나, 기본앱과는 다른 타입의 앱을 출시해서 사용하도록 하는데 사용할 수 있는데요. 먼저 빌드별로 다른 값을 가지도록 할 때 사용하는, buildConfig클래스의 buildConfigField에 대해서 알아보도록 하겠습니다. 1. buildConfig 클래스 1-1. BuildConfigField 구현 빌드가 될 때, 안드로이드의 빌드 시스템인 Gradle은 BuildConfig클래스를 생성합니다. 이는 현재 빌드에 대한 정보를 확인할 수 있도록 하기 위함인데요. BuildConfig클래스의 buildConfigField()메소드를 이용하면, 인자에 원하는 값을 넣.. 2019. 8. 13.