본문 바로가기
반응형

전체 글362

SparseArray 가 무엇인가요? HashMap의 키값으로 Integer를 사용하면, Android스튜디오가 퍼포먼스 향상을 위해서 SparseArray를 사용하라고 하는 것을 본적이 있으신가요?저도 종종 보게되는데요. 오늘은 이 SparseArray에 대해서 간단히 정리해보도록 하겠습니다. 1. SparseArray SparseArray는 integer값을 Objects에 매핑을 해주는 것인데요.특이한 점은, 각 인덱스 사이에 공간을 만들수 있다는 것입니다.(예를 들면, 1~10번에 아이템들이 있고, 그다음에 11~20번은 비우고, 30~40번에 아이템들을 넣을 수 있다는 것이죠.) 성능향상을 위해서 SparseArray는 데이터가 지워지면, deleted로 표시하고 그 공간을 비워놓습니다.(물론, 지워진 데이터의 키값을 주고 데이터를.. 2017. 3. 29.
Android 에서 wake lock 으로 휴대폰을 깨우자. 알람앱 같이 안드로이드 폰이 잠들어 잠들어 있다가, 일정시간이 되면 앱의 화면이 켜져야 한다면 어떻게 해야할까요?이 때 사용할 수 있는, 안드로이드 시스템에서 제공해주는 기능으로 wake lock 이라는 것이 있는데요.오늘은 이것에 관해서 정리해보겠습니다. 1. Permission 선언 제일 먼저 해야할 것은 permission을 선언하는 것입니다.너무도 다행스러운 것은 동적 permission의 대상은 아니라는 것이네요.아래와 같이 manifest에 선언해주면 됩니다. 2. Cpu 깨어있도록 하기 사용자의 휴대폰이 Sleep모드로 들어가도, 폰의 CPU가 깨어있다면 일정한 시간에 계산을 해서,화면을 켜고 소리를 플레이 하는 등의 과업을 수행할 수 있습니다. 이것은 어떻게 하는 것일까요?Cpu가 깨어있도.. 2017. 3. 23.
Matcher 클래스와 Pattern Class로 정규 표현식을 활용해보자 지난 글에서 정규 표현식(Regular Expression)에 대해서 정리해 보았었는데요.오늘은 Matcher클래스와 Pattern 클래스를 이용해서,정규 표현식을 활용해보는 것에 대해서 정리해 보도록 하겠습니다. 참고로, 정규표현식에 관해서는 아래글을 참조해주세요.>>> 정규 표현식 (Regular Expression) 과 응용 사례를 정리해 보자 2017. 3. 22.
안드로이드 Notification 구현하기 feat. Big View 모바일 앱에서 매우 중요한 스펙중하나가, 유저에게 정보를 알려줄 수 있는 Notification인데요.오늘은 이 기능에대해서 정리해보려고 합니다. 유저에게 정보를 알려줄 때에 사용하는 클래스는 NotificationBuilder 클래스인데요.하위호환성을 위해서, 구글에서 제공해주는 Support라이브러리의 NotificationCompat.Builder클래스를 사용해야합니다. 1. Noti버튼 XML 생성 먼저 아래와 같이, Notification을 생성하는 버튼을 XML파일에서 만들겠습니다. 2. Notification Builder 필수 메소드 구현 제일 먼저 구현해야하는 것은 NotificationCompat.Builder클래스입니다.필수로 구현해야하는 메소드는, 아래에서 구현한 것과 같은데요.아이.. 2017. 3. 21.
RxJava 의 FlatMap, From 그리고 filter 로 For문 에서 벗어나보자 RxJava의 장점중의 하나는 다양한 Operator의 제공인데요.오늘은 FlatMap과 From을 사용하여서,Observable이 흘려보내준 List아이템들을,for문을 돌리지 않고 filter를 하여,원하는 결과만을 얻을 수 있도록 하는 방법에 대해서 정리해보겠습니다. 혹시 RxAndroid 가 무엇인지에 대해서, 보고싶으시다면,아래의 글을 참조해 주세요~.>>> RxAndroid 이해하기 Part1 RxJava (RxAndroid)의 Map 과 FlatMap 메소드를 알아보자 RxJava (RxAndroid) 의 마블 다이어그램을 이해해보자.) 하나의 Collections를 받아서, 각각의 아이템으로 흘려보내준다는 것을 알 수 있습니다. filter는 Operator의 단어만 봐도 아실것 같은데요... 2017. 3. 20.
Java 배열 및 ArrayList 를 Comparable과 Comparator 를 이용해 정렬하기 안드로이드 앱을 만들 때, 자료형으로 배열이나 arrayList를 사용하게 되는 경우가 많은데요. 작업을 하다보면, 자료를 넣은대로 꺼내서 사용하지 않는 경우도 생기고,유저에게 보여줄 때, 순서를 필터링해서 보여줘야 하는 경우도 생깁니다. 오늘은, 배열이나, ArrayList를 이용해서, 자료를 원하는 Data기준으로, 정렬하는 방법에 대해서 정리해 보도록 하겠습니다. 1. 간단한 배열의 오름차순 정렬 먼저 아래와 같은 간단한 형태의 배열을 생성합니다. 순서가 뒤죽박죽인데요.오름차순으로 숫자가 적은 순서대로 정렬해 보도록 하겠습니다. Array.sort() 메소드에 인자로 위에서 생성한 Array를 넣어주기만 하면 되는데요.이것을 정렬해서 리스트로 표현해보겠습니다. 참고로 RecyclerView로 리스트.. 2017. 3. 19.
Hot Observable 과 Cold Observable은 무엇인가요? 오늘은 RxAndroid의 Hot Observable과 Cold Observable에 대해서 정리해 보겠습니다.Hot하고 Cold하다는 것이, 어떤 면에서 차이가 있는지 알아보고,Cold Observable을 사용하는 Operator도 정리해보겠습니다. 참고로, RxAndroid의 기본적인 사항에 대한 것은 아래 글을 참조해주세요. >>> RxAndroid 이해하기 Part1 2017. 3. 19.
Callable 과 Runnable 뭐가 다른가요? 이전 글에서 Thread에 대해 정리하면서,Runnable에 대해서도 정리하였었는데요. 오늘은 Callable과 Runnable을 비교해 보도록 하겠습니다. 참고로 이전에 Runnable을 정리한 글은, 아래링크를 참조해 주세요.>>> 안드로이드의 Multi Thread, Runnable, Looper 그리고 Handler 2017. 3. 18.
Bit 논리 연산과 시프트 연산 의 정리 오늘은 bit의 논리 연산과 시프트에 대해서, 정리해 보려고 하는데요.Bit가 대체 무엇인지 먼저 알아보겠습니다. 1. Bit = Binary Digit Bit는 Binary Digit의 약자인데요.컴퓨터에서 사용하는 가장 작은 단위 데이터 단위입니다. Binary가 2개를 의미히고, digit은 자리를 의미해서,합쳐서 2개의 자리수라는 뜻인데요. 여기서 의미하는 2개의 진수는 0과 1을 가르킵니다. 2진수를 구하는 방법은 다른 글에서 정리를 하구요.(특히 음수를 표현하는 방법은 따로 정리할 필요가 있을 것 같네요.)오늘은 자바에서 제공하는 toBinaryString()메소드를 이용해서, 10진수인 88의 Binary값(즉, 2진수)를 뽑아보겠습니다.(참고로, 자바에서 8진수는 toOctalString(.. 2017. 3. 16.
Parcelable 을 사용해 데이터를 전달해 보자 안드로이드에서 Intent를 통해서 Activity로 data를 전달할 때, String이나 int같은 기본형이 아니고, 객체로 전달해야 할 때가 있습니다. 이때 Java에서 제공하는 Serializable을 implement하면 ,객체를 직렬화해주고, 다시 복원할 수 있게 해주구요. putExtra()에 인자로 넣어서 넘겨주기만 하면되니,구현해야할 메소드도 없어, 사용하기도 편리합니다. 참고로 아래링크에서 Serializable에 대해서 볼 수 있습니다.(Activity로 Object넘겨줄 때엔 Serializable) 그런데, 한가지 방법이 더 있습니다.바로 Parcelable이라는 interface를 사용하는 것입니다.구현하기는 좀더 복잡하기는 하지만,Java에서 재공해주는 Serializable보.. 2017. 3. 13.
안드로이드에서 카톡방식의 ViewPager + Tab 레이아웃 구현 카카오톡 을 사용하시다보면 좌우로 화면을 넘겨서 탭을 이용할 수 있는데요, 예를 들면 친구탭에서 채팅탭으로 이동할때, 상단 탭을 누를수도 있지만, 옆으로 쓰윽 밀어도 되지요? 이런 방식의 레이아웃을 구현하는 것을 정리해보려고 합니다. 1. 구조분석 상단에 3개의 탭메뉴가 있고, 각 탭에 따라서, 3개의 페이지가 있는데요, 이 페이지들은 Fragment로 만들려고 합니다. 만들고자 하는 화면은 아래와 같습니다. 움직임을 보여드릴수는 없지만, 카톡처럼 좌우로 스와이핑되면서 탭간이동이 되는 화면입니다;;;. 2. 필요한 라이브러리 설정 오늘도 예외없이 라이브러리 설정 먼저하고 갑니다~. dependency에서 design이라고 검색하시면 맨위에 나오는 라이브러리를 선택해주세요. 이번에 사용하는 라이브러리는 d.. 2017. 3. 13.
AlarmManager 로 구현하는 안드로이드 알람 안드로이드에서 앱을 만들다 보면,Alarm기능을 구현해야 할 때가 있습니다. 본격적인 알람앱이 아니어도,유저가 원하는 시간에 어떠한 노티가 와야 하는경우가 있기 때문인데요. 오늘은 Alarm기능에 대해서 정리해 보겠습니다. 1. Alarm 기능의 구현 안드로이드에서 Alarm은, 안드로이드 시스템의 AlarmManager에게 알람기능을 부탁하여 실행되도록 하는데요.이 AlarmManager에게 어떤 receiver를 호출할지에 대한 intent를 가지고 있는 PendingIntent와 얼마나 delay 된 후 실행시킬지를 알려주어서 set을 해줍니다. Alarm이 set되면, 정해진 시간에 AlarmManager가 receiver에게 broadcast 해주고,receiver가 이를 받아서 service를.. 2017. 3. 13.
CompileSdkVersion, MinSdkVersion, TargetSdkVersion 그리고 BuildToolsVersion 안드로이드 작업을 하면서, 최신버전으로 라이브러리로 업데이트하는일이 많은데요. 특히나, 구글에서 제공해주는 design, recyclerview, cardview 같은 라이브러리를 추가해보면, 계속 최신버전으로 업데이트 되는데요. 그런데, 이상하게 build.gradle에 최신버전으로 위의 라이브러리들을 추가하면, 아래이미지와 같이 빨간줄이 있는 경우가 있습니다. 뭐가 문제지? 하고 줄이 간곳에 마우스를 올려보니 아래와 같이 나왔습니다. compileSdkVersion이 23인데, 제가 25버전의 라이브러리를 추가했다 이거죠. "음. 그럼, compileSdkVersion을 25로 올리면 되겠구나" 하는 생각이 들긴 하는데요. 그렇다면, compileSdkVersion이라고 하는 건 뭘까요? 1. com.. 2017. 3. 12.
ConstraintLayout 의 매력에 빠져보겠습니다 어느 순간부터 안드로이드 스튜디오를 업데이트 하고나서,프로젝트를 생성한 뒤에, MainActivity.xml을 열어보면,Root ViewGroup이 아래와 같이 ConstraintLayout으로 되어 있는 걸 볼 수 있습니다. 도대체 얼마나 매력적이기에, 구글에서 이것을 디폴트로 쓰라고 추천하는지 궁금해지는데요.오늘은 이 ConstraintLayout에 대해서 정리해 보면서, 그 매력에 빠져보겠습니다~. 1. ConstraintLayout Constraint의 한글뜻은 제한, 통제라는 뜻인데요.모순적이지만, 구글에서는 블로그에서 ViewGroup을 아주 파워풀하고, 유연한 툴이라고 소개하고 있습니다. 구체적으로는, 복잡한 UI들을 안에 겹겹히 쌓지 않고도,위치나 사이즈를 유연하게 적용시킬 수 있는 Vie.. 2017. 3. 10.
Realm 에서 Thread Error 없이 데이터 조회후 삭제하기 오늘은 Android Realm에서 데이터를 조회한 후에,그 데이터를 삭제하는 것에 대해서 정리를 해보고자 합니다.생각해보면 그리 어렵지 않은 일인데요. 하지만 Realm에서는 Thread에 대해서 민감하기 때문에,이 쉬운일이 조금 어렵게 보일때가 있습니다. 1. Realm과 Thread Realm은 어느 Thread에서나 조회 또는 write할 수 있는데요.하지만, 서로 다른 Thread에서 데이터를 수정할 수 있다는 애기는 아닙니다. 즉, A쓰레드에서 write하고, B쓰레드에서 Read할 수 있지만,A쓰레드에서 바로 데이터를 수정해서 Update할 수는 없습니다.그리고, B쓰레드에서 A쓰레드로 바로 데이터를 넘겨줄수도 없습니다.쓰레드에 대해, 조금은 까다로운 편입니다. 다른 thread에서 데이터를.. 2017. 3. 8.
Android 운영체제의 기본구조 및 Architecture 오늘은 안드로이드 운영체제의 기본구조에 대해서 정리해 보겠습니다.안드로이드를 공부하게 될때, 보통 초반에 스윽 보고 지나가게 되는 부분인데요.하나하나 짚어가면서 보겠습니다. 1. 안드로이드 기본구조 안드로이드의 기본구조에 대해서는 아래표를 보면 이해하기가 쉬운데요.크게 5개의 큰 레이어로 분리할 수 있습니다. 아래의 표와 같이, 가장 하단부터, Linux Kernel, Libraries, Android Runtime, Application FrameWork, Applications 으로 구성되어 있습니다. (출처 = Smieh - Anatomy Physiology of an Android) 1-1. Linux Kernel 레이어 안드로이드는 가장 하단에 Linux Kernel이 있기 때문에, 리눅스 기반.. 2017. 3. 8.
Java Wrapper 클래스 를 정리해 보자 안드로이드 프로그래밍을 하다보면,Wrapper Class를 사용하게 되는 경우가 많이 있습니다.HashMap이나 Generic, 혹은 ArrayList를 사용할 때 인데요. 오늘은 Java의 WrapperClass에 대해서 정리해보겠습니다. 1. Wrapper Class Java 개발을 할 때, 무심코 사용하던 Wrapper Class란 말은,사실은 기본형(Primitive) 타입을 Wrap해서 쓰는, Primitive Wrapper Class를 지칭한다고 볼 수 있습니다. 실제로 Wrapper Class는, Primitive Wrapper Class뿐만이 아니라, 어떤 Class를 Wrap(포장)해서 사용하는 Class를 가르키는 것 입니다.하지만, 이 글에서도, Wrapper Class를,자바의 Pr.. 2017. 3. 7.
CollapsingToolbarLayout 으로 구현한 닫혀지는 ActionBar 안드로이드 Material Design이 나오면서, 앱 디자인에 종종 등장하는 UI가 있는데요. 바로, CollapsingToolbarLayout입니다. 이 Layout은, 아래와 같이 닫혔다, 열렸다 하는 안드로이드의 ActionBar를 가르키는데요. 오늘은 이UI를 구현하는 것에 대해서, 정리해보겠습니다. 1. Design Library 준비 MaterialDesign의 대표적 레이아웃인 CollapsingToolbarLayout을 사용하기 위해서는, Google이 제공하는 DesignLibrary가 필요합니다. dependencies에 아래와 같이 추가하면 됩니다. 직접 build.gradle에 추가하고자 한다면, compile 'com.android.support:design:25.2.0' 를 추.. 2017. 3. 5.