All

    Message

    Message

    Message 안드로이드 쓰레드에는 크게 main thread, background thread 로 나뉜다. main은 UI에 해당되는 모든 처리를 담당한다. background는 이 외의 다른 네트워킹 처리라던가 뭔가 시간이 더 걸리는 것을 처리한다. 일단은 이렇게 개념을 잡았다. 메세지는 그렇다면 무엇에 쓰이는 것일까? main도 처리할 UI 작업이 많고, back도 처리할 작업이 있는 경우 back이 아무리 처리를 많이하고 빨리한다해도 main이 준비되지 않으면 보이지 않는다. 그만큼 back에서는 다양한 업무를 처리하고 main에게 보낸다. 그러나 main이 일이 너무 많다면, 이러한 back의 작업을 무시하거나 back이 완료된 일을 들고 계속 대기해야하는 경우가 생긴다. 이런 현상이 바로 우리..

    Retrofit

    Retrofit

    Retrofit Retrofit 은 Square사에서 제공하는 오픈 소스 라이브러리이다. REST API를 안드로이드에서 쉽게 사용하도록 도와준다. OkHttp 라이브러리를 자신의 HTTP클라이언트로 사용한다. 래트로핏은 HTTP 게이트웨이 클래스 생성을 도와준다. - 애노테이션을 지정된 함수를 갖는 인터페이스를 작성한다. - Retrofit이 인터페이스의 구현 클래스를 생성한다. - 이 클래스에서 HTTP 요청(request)을 하고 OkHttp.ResponseBody 로 HTTP 응답(response)을 파싱한다. 여기서 중요한 포인트는, ResponseBody를 그대로 받아오는 것보다 형변환을 한번 거쳐서 가져오는 것이 더 편하고 좋다. 응답 변환기 Response Converter 앱에서 필요한 ..

    [Android] 시스템 UI가 응답하지 않음. System UI isn't responding.

    [Android] 시스템 UI가 응답하지 않음. System UI isn't responding.

    [Android] 시스템 UI가 응답하지 않음. System UI isn't responding. 이 놈의 애뮬레이터는 언제쯤 물리적 디바이스보다 원할하게 사용할 수 있을지 의문이다. 이번 상황은 애뮬레이터가 잘~ 돌아가다. 특정 짓을 하면 이렇게 갑자기 홈, 뒤로가기, 오버뷰 버튼이 없어지면서 그냥 UI가 안된다고 버벅버벅 거린다. 당연히 컴퓨터가 느려서 그런것도 있지만, 애초에 애뮬레이터를 가볍게 만들어줄 수는 없나보다. 아무튼 이러한 문제가 있을때, 나름 찾은 방법을 계속 추가해서 기록해두려한다. 1. 애뮬레이터 폴더로 이동해서 뭔가 이상한 파일을 제거해본다. (무지성) 뭔지는 모른다. 그냥 따라해본다. [뭔지모르는 파일 삭제 방법] 켜져있는 애뮬레이터를 일단 끈다. (요즘은 끄는것도 어렵다.) 그..

    Wine : Decanting & Carafage

    Wine : Decanting & Carafage

    Decanting & Carafage 디캔팅과 카라파주 ? 와인 병의 내용물 전체를 카라프에 옮겨 붓는 것이다. 카라파주 : 와인을 산소와 접촉시키기 위한 것이다. 디캔팅 : 와인 병 바닥에 가라앉은 침전물과 와인을 분리하기 위한 것이다. 어린 와인 (생산년도가 짧은 와인) 👉 카라파주 오래된 와인 (생산년도가 긴 와인) 👉 디캔팅 카라프? = 디캔터 어린 와인 카라파주 이유 와인 향을 깨우기 위해서이다. 어린 레드 와인에서 나기도 하는 환원취(밀봉상태에서 생기는 냄새)를 제거할 수 있다. 방법 와인의 강함에 따라 다르지만, 1시간 또는 2-3시간 전에 병에 든 와인을 카라프에 옮겨 붓는다. 병을 높이 들어 따르면 산소와의 접촉 효과를 최대로 얻을 수 있다. 카라프에 부은 후 세게 흔들면 뭉쳐 있던 와인..

    emptyList()

    emptyList()

    비어있는 리스트 표현 [보러가기] Returns an empty read-only list. The returned list is serializable (JVM). val list = listOf() println("list.isEmpty() is ${list.isEmpty()}") // true // another way to create an empty list, // type parameter is inferred from the expected type val other: List = emptyList() // Empty lists are equal println("list == other is ${list == other}") // true println(list) // [] println(o..

    JetPack AAC: DataBinding

    JetPack AAC: DataBinding

    Data Binding LiveData 와 DataBinding ? 둘 다 데이터가 변경되는지 관찰하면서 변경될 때 반응하는 방법을 제공한다. 그러나 둘의 사용법에서의 차이가 존재한다. [스택오버플로 글 참고하기] UI 상의 변화를 실시간으로 관찰하고 반영하고자 한다. 👉 DataBinding 백그라운드에서 데이터를 관찰하고 관리한다. 👉 LiveData [좀 더 자세히 보기] 그리고, LiveData는 LifeCycleOwner를 사용해줘야 한다. 간단하게 이렇게 인식하고 활용하자. 1. 원하는 화면에서 데이터 묶기 기능 추가하기 먼저, 데이터 묶기를 시도할 화면이 필요하다. xml 코드상에 아래의 예시와 같이 작성한다. 구체적인 설명 1. 태그를 xml 코드 전체를 감싼다. xmlns 부분은 layo..

    Accessibility

    Accessibility

    Accessibility 이 앱은 접근성이 좋다. 접근성 ,이 말의 뜻은 시각, 거동, 청각 장애에 상관없이 누구나 사용할 수 있다는 의미이다. 앱의 접근성이 좋을 수록 앱을 더 편안하게 사용할 수 있다. 접근성이 완벽하게 좋은 앱을 만들기는 어렵다. 그렇다고 해서 시도조차 하지 않는 것은 적절하지 않다. TalkBack 토크백은 구글에서 만든 음성 안내 지원 앱이다. 사용자가 수행하는 작업을 기반을 화면의 내용을 음성으로 알려준다. 토크백은 접근성 서비스 (Accessibility Service) 로 작동하는 특별한 컴포넌트이다. 어떤 앱을 사용하든 이것을 통해 화면으로부터 정보를 읽을 수 있다. 기능을 사용해보기 위해 아래와 같이 한다. 1. Android 접근성 도구 모음 설치 ( 구글 플레이 검색..

    Localization

    Localization

    Localization 지역화는 사용자의 언어 설정을 기반으로 앱의 적합한 리소스를 제공하는 절차이다. 주로 지역화 작업은 리소스를 통해서 먼저 진행된다. values/ 폴더 아래에 원하는 이름(주로 strings)으로 문자 리소스 파일을 만들어준다. 위와 같이 Locale 을 선택한뒤, 원하는 언어를 선택한다. 예를들어 일본어를 선택헀다면, values-ja 로 형성된다. 언어 구성 수식자는 ISO 639-1 코드의 표준을 따라 두개의 문자로 구성되며, 일본어는 수식자가 ja이다. 탐색기에서는 string.xml (ja) 라는 파일명으로 보인다. 참고로 제일 우측에 Specific Region Only 는 말그대로 어떤지역에서만 그 언어가 보이게 할지 선택하는 것이다. Any Region이 기본값이고 ..