본문 바로가기

Android

(48)
[Android] Socket 통신 예제(New) 하나의 디바이스에서 간단한 서버 앱, 클라이언트 앱을 구성하여 소켓 통신을 수행할 수 있는 예제이다. 자세한 개념설명은 생략하였으며, 개념이해 전 간단한 예제 먼저 작성해보고싶을 경우 해당 포스팅을 읽는 것을 추천한다. 같이 알아두면 좋은 내용 Socket 의 개념 Android Permission Service 생명주기, ForegroundService Android 에서 Thread 를 다루는 방법 Notification 구현 순서 요약 서버 앱 구성 서버를 실행할 Service 클래스 작성 서버 역할을 하는 ServerThread 클래스 작성 메인 액티비티에서 구현한 Service 실행(Foreground) 클라이언트 앱 구성 화면 구성 서버에 연결할 ClientThread 클래스 작성 서버 앱 구..
[Android Studio] xcrun: error: invalid active developer path xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 원인 : Max os 를 업데이트하고나서 자주 발생하는 오류라고한다. 안드로이드 스튜디오에서 git 을 사용할 수 없었고(Annotate 나 브랜치 관련 작업 등), 검색해보면 주로 XCode에서도 발생하는 오류라고한다. 해결방법 : Git 을 새로 설치하고 version controll - git configuration 에서 git 이 설치된 경로를 적어주면 된다. /usr/local/git/bin/git 참고 : https://sta..
[Android] BaseSavedState 를 이용하여 View 에 상태 저장하기 안드로이드는 화면을 회전시키는 것과 같이 configuration change 가 발생하면 액티비티가 재생성된다. (onDestroy() 후에 onCreate() 부터 라이프사이클이 다시 시작되기 때문) 따라서 뷰에 어떤 정보를 저장하고있었다면 모두 잃게 될 것이다. 이를 해결하기 위해 다양한 방법이 공식문서에 소개되어 있지만, 여기에 자세히 설명되어있지 않은 방법이 있다. 내가 영어를 못해서그렇지, 이미 있을 수도 있음 그 방법은 바로 View 클래스의 static inner class 로 BaseSavedState에 내가 저장하고 싶은 정보를 담아 복원하면 된다. Configuration change 가 일어나도 정보가 저장될 뿐더러 메모리 부족으로 프로세스가 kill 당하더라도 데이터를 유지할 수 ..
[Android] RxJava2 + Retrofit2 에서 언제 call 이 cancel 되는가 고찰 너무 피곤해서 코드만 보고 의식의 흐름대로 작성해본 것. 주관이 많이 들어갔기때문에 100% 신뢰해서는 안된다. 전제 : retrofit 이 리턴해주는 Single 을 옵저버블로 변환해 사용중(우리 프로젝트 구조의 특성상 이렇게 했다) 1. Retrofit 은 인터페이스로 정의한 API 를 기반으로, 어노테이션 프로세서를 이용해? 뚝딱뚝딱 어떤 클래스 를 만들어낸다. // Retrofit.class // 여기서 T 는 클래스 (Something::class.java) public T create(final Class service) { Utils.validateServiceInterface(service); if (validateEagerly) { eagerlyValidateMethods(service)..
[Android] RecyclerView 에서 엣지 스크롤 이펙트 숨기기 리사이클러뷰의 맨 첫번째 또는 마지막 요소에서 스크롤(오버스크롤)할 경우 발생하는 이펙트를 숨겨야하는 요구사항이 있었다. 그래서 검색해보면, 대부분 리사이클러뷰에 android:overScrollMode="never" 속성을 적용하면 해결할 수 있다고 나와있다. 실제로 이 속성만 추가해주면 해당 이펙트는 사라진다. 하지만 이 속성을 적용할 경우 오버스크롤 모드가 비활성화 되기 때문에, 오버스크롤이 필요한 경우에는 적용하면 안되는 방법이다. 그래서 오버스크롤 모드가 필요한 경우에 아래와 같은 방법으로 해주면 된다. (이것저것 해보다가 발견한 것이고, 잘 알려진 방법이 아니기때문에 다른 사이드이펙트가 발생할 수 있으니 주의!!) recyclerView.edgeEffectFactory = object : Re..
[Android] Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant). Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant). 머티리얼 컴포넌트 테마도 extend 하려고했더니 없다면서 안되고, 이미 있는 테마 갖다쓰려니 똑같이 안되고결국 공식 문서에 다 나와있었는데 영어 해석이 안돼서 삽질이 오래됐다;;; 공식문서 : https://material.io/develop/android/docs/getting-started/ 그래들도 추가하고 하라는거 다했는데 중요한 4번을 빼먹어서 문제였다.4. Change your app theme to inherit from a M..
[Android] android:src VS app:srcCompat app:srcCompat is the most foolproof method of integrating vector drawables into your app.Vector drawables allow you to replace multiple png assets with a single vector graphic, defined in XML. While previously limited to Lollipop and higher devices. app : srcCompat는 벡터 드로어블을 앱에 통합하는 가장 확실한 방법입니다. 벡터 드로어블을 사용하면 여러 png 애셋을 XML로 정의된 단일 벡터 그래픽으로 대체 할 수 있습니다. 이전에는 Lollipop 이상의 기기에만 사용할 수 있었습니다. As of..
[Android] CoordinatorLayout 활용 내용 업데이트: 20.09.15 CoordinatorLayout 을 활용한 스크롤 이벤트 구현하기실행환경 : Android Studio 3.2API : API 24 Nougat test device : Galaxy Note 9 (API 28 Oreo) 출처 : material.google.com 스크롤 이벤트에 따라 부드러운 애니메이션과 함께 툴바가 사라지고 보여진다.이를 구현할 수 있는 기본 레이아웃은 바로 CoordinatorLayout 이다. 아래와 같이 app.gradle 에 디펜던시를 추가해주어야한다.원래는 support 라이브러리에 따로 존재했지만, androidx 로 업데이트 된 이후로 함께 포함되어있다. 두번째 줄에 있는 머티리얼 디펜던시를 추가해주지않으면, 코디네이터 레이아웃에서 세팅할 ..