일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Intent String 변환
- callstack 출력
- MediaDataSource
- Service관리
- APK로딩
- convert Intent to string
- lufs
- android network
- java callstack
- RxJava 스터디
- APK 동적로딩
- gitignore작성법
- Service 팁
- print callstack
- mitmproxy
- RxJava Programming
- gitignore
- 음량표준화
- 오픈소스라이선스
- Dagger2란
- convert string to intent
- so파일 동적로딩
- corePoolSize
- Replaygain
- 네트워크 디버깅
- BlockingQueue Capacity
- android enum
- enum performance
- ArrayMap
- HashMap vs ArrayMap
- Today
- Total
목록개발 (21)
일상&개발 로그
네트워크 디버깅(http/https)을 위해 솔루션을 찾아보다 mitmproxy를 찾았습니다. stetho 같은 라이브러리도 확인해봤는데, 소스를 삽입하고 interceptor를 끼워넣어야 해서 패스. 사용이 간편하고, proxy를 사용해서 따로 코드를 삽입하거나 로딩할 필요 없고, 라이브러리에서 쏘는 패킷도 확인 가능한 장점이 있습니다. Proxy에 사용할 PC(Proxy서버)와 같은 WiFi 망에 물려있어야 하며, 프로세스/스레드/앱 별로 분류가 안되는 단점이 있겠습니다. Mac환경에서 homebrew를 이용해서 간단히 설치가 가능합니다. 1. 설치 brew install mitmproxy 2. 단말 WiFi Proxy 설정- 프록시: 수동 - 프록시 호스트 이름: PC(Proxy서버) IP주소 - ..
ThreadPoolExecutor는 ExecutorService를 상속받은 클래스로Task(Runnable)를 저장하는 BlockingQueue와 이를 수행하는 ThreadPoolSize를 설정할 수 있다. ThreadPoolExecutor 생성자에서 corePoolSize와 maximumPoolSize, BlockingQueue를 지정할 수 있는데,여기서 지정하는 BlockingQueue의 capacity가 unbound인 경우, threadPoolSize는 corePoolSize에서 늘어나지 않는다.구동되는 threadPool의 크기를 maximumPoolSize만큼 늘리려면 BlockingQueue의 capacitiy를 지정해 줘야한다.주의할 점은 capacity를 지정할 경우 corePoolSiz..
데이터 발행자 종류 - Observable, Single, Maybe, Subject, Completable데이터 수신자 종류 - Subscriber, Observer, Consumer 뜨거운 Observable: 구독자가 있든없든 계속 발행하는 Observable ex) 클릭 이벤트, 센서데이터 등등차가운 Observable: 구독자가 있어야만 발행되는 Observable ex) 웹 요청, DB query, 파일 입출력 데이터 발행자 특징Single: 데이터 발행이 최대 1개 가능함.Maybe: 데이터 발행이 최대 1개 가능하며 데이터 발행 없이도 완료 가능함.Subject: 차가운 Observable을 뜨거운 Observable로 변환해줌.종류: AsyncSubject, BehaviorSubject,..
elvis연산자: null일 경우 할당되는 값을 정의하는 연산자. ex) if (instance?.method ?: 1 > 0)의 경우, instance가 null 또는 method 결과 값이 null일 때 1이 할당된다. optional 사용: if문 내부에 사용 시 == true 또는 == false를 붙여서 써야함. ex) if (instance?.method) // compile error if (instance?.method() == true) // instance나 method의 결과 값이 false나 null가 아닌 경우만 접근. true/false도 비교 연산 시 Boolean으로 처리 됨 (null과 비교가 가능) null 체크 없이 null 여부에 따라 분기하고 싶을 때 instance..
소스 변경여부 확인 팁git checkout master/release로 local branch 변경TAG="$(git describe --abbrev=0)" // 해당 branch의 가장 최신 태그명을 가져와서 TAG에 담음git diff --name-only "${TAG}" | grep (변경사항 확인하고 싶은 class나 module명) // local branch와 해당 TAG를 비교하여 변경사항을 출력
미디어 음량 표준화 방법을 찾던 중 ReplayGain이라는 것을 발견 했습니다.실시간 서비스에서 단말자원으로 다시 encoding을 하는 것이 사실상 불가능하기 때문에 볼륨만 사용해서 음량을 조절하는 ReplayGain은 괜찮은 솔루션으로 생각됩니다. 적용 배경여러 미디어를 재생하는 상황에서 각 미디어의 음량이 다르기 때문에 사용자가 수시로 볼륨을 조절해야 하는 불편을 겪게 됨음량이 다른 원인: https://www.seeko.co.kr/zboard4/zboard.php?id=faq&no=7975용어 정의 LUFS(Loudness Unit relative to Full Scale) 인간이 소리를 듣는 행위에 대한 특성들을 수치화 하여 나타내는 단위로, 실제 사람이 '어느정도로 크게 느끼는가'를 표현하는..
Singleton패턴은 하나의 인스턴스만 사용하는 경우 많이 사용되는 패턴입니다. Singleton패턴을 구현하는 방법에는 여러가지가 있는데, 그 중 DCL과 Demand Holder에 대해 알아보겠습니다.(DCL은 "lazy-initialization" 시 locking의 overhead를 줄이기 위해 사용합니다.)기존에 DCL(double-checked-locking)을 많이 사용했었는데, Holder를 사용하면 더 알아보기 쉽게 사용이 가능하다고 합니다. (DCL은 volatile을 사용하지 않으면 Compiler의 reorder에 의해 thread-safe하지 않습니다.) # DCLprivate static volatile Something instance = null; public static ..
Android에서 제공하는 기본 MediaPlayer는 Uri, FilePath, FileDescriptor만 dataSource로 지정 가능 했습니다.또 내부로직이 거의 native로 구현되어 reflection의 여지도 없었습니다.그래서 다운로드와 동시에 재생하는 버퍼링을 외부에서 구현할 수 없었습니다.(setDataSource를 이용하면 MediaPlayer내부에서 버퍼링하긴 합니다.)MarshMallow부터 제공되는 MediaDataSource를 이용하면 외부에서도 버퍼링처럼 동작하도록 구현이 가능합니다.프로그레시브 다운로드 정보 링크(주의: 제공되는 음원포맷이 프로그레시브 다운로드를 지원해야합니다.) @RequiresApi(api = Build.VERSION_CODES.M)public class..
오픈소스를 사용할 때 참고하기위해 퍼온 자료입니다. 원 저작자는 http://www.androidpub.com/2582044글의 HackerK님 입니다. GPL -> GNU Public Licence (GNU 공공 허가서) 의 경우는 v2, v3 차이는 기억이 안나지만 이 라이센스의 오픈소스를 사용할 경우 결과물도 반드시 오픈소스여야합니다. LGPL -> GNU Lesser (2.1에서 Library -> Lesser로 변경) General Public License GPL과 비슷하지만, 독점 소프트웨어에 사용 가능합니다. 이 라이센스를 라이브러리 형태로만 사용한다면 소스를 공개하지 않아도 되고, 수정할 경우 그 수정된 라이브러리를 공개해야합니다. 수정된 라이브러리는 GPL이나 LGPL을 따라야합니다. ..
# Enum 단점 1. dex크기가 커진다.- 동일한 기능 int를 썼을때 vs enum을 썼을 때 dex크기 차이 비교 기존 int 추가 enum 추가 dex사이즈 2556bytes 2680bytes 4188bytes int: 124bytes 추가enum: 1632bytes 추가 약 13배 가까이 차이남 dex크기가 앱 성능에 직접적인 영향을 미치지는 않는다. 그러나 앱 실행을 위해서는 Heap 메모리에 dex파일을 로딩해야 하는데 Heap메모리가 부족하게되면 System Memory에 압박이 가해지고, 메모리 공간을 확보하기위해 앱이 종료될 수도 있다. 단점 2. Runtime 오버헤드가 추가된다.뿐만 아니라, enum이 선언될 때마다 16 + 20bytes 정도 Runtime 메모리 오버헤드가 추가..