본문 바로가기

프로그래밍 놀이터2030

[android] dpi 값이 바뀔 수 있구나?!! ㄷㄷㄷ -이슈를 치다가 activity popup 모드를 접하게 되면서 activity popup 모드에서 어떻게 UI 들을 작게 그리는지를 팀원과 이야기하게 되었다.팀원은 dpi 값이 줄어들 것이 명백하다라고 했고, 나는 그렇다면 popup 모드로 변환하면서 그럼 res 의 참조들도 변하는거냐? xxhdpi -> xhdpi 가 되는거냐? 라고 물었다. 그래서 나는 명백한지는 모르겠다고 의견을 개진했다. 처음에는 흥미가 없었는데 흥미가 생겨 테스트해보기로 했다. -일단 popup 화면으로 전환 / full screen 으로 전환시 activity 를 destroy 하고 recreate 한다.manifest 의 configChanges 에 density 를 걸어주면 recreate 되지 않는다. 단, 이 녀석은 .. 2020. 8. 15.
[android] 앱 업데이트시 다운로드 사이즈 줄이기 https://android-developers.googleblog.com/2016/12/saving-data-reducing-the-size-of-app-updates-by-65-percent.html -돼왕 : 참고로 링크 걸린 원글은 2016.12.06 글임을 참고하시길.. -2016년 초부터 bsdiff algorithm 을 사용하여 app update 시 과거와 비교하여 47% 정도의 apk download size 를 줄일 수 있었다.File-by-File patching 기술을 이용하여 평균적으로 앱 업데이트시 본 apk 사이즈에 비해 약 65% 정도 작은 사이즈를 내려보낼 수 있게 되었다. -새로운 버전을 다운로드 받을 때 Google Play 는 과거버전과 새로운 버전의 앱 사이의 dif.. 2020. 8. 14.
[android] Activity Task 에 대한 이야기 with allowTaskReparenting 실험 (심화) -아래 명령을 통해 activity stack 을 볼 수 있다.$ adb shell dumpsys activity 여기서 TaskRecord 가 Task 의 group 구분이며,이 안에 Hist #N 로 표기된 HistoryRecord 부분을 보면 그 안에 쌓인 Stack 을 볼 수 있다.stack 은 packageName/Activity 형태로 표기된다. -FLAG_ACTIVITY_NEW_TASK 는 affinity 가 같은 task 위에 쌓이게 된다.따라서 A affinity 를 가진 A1 Activity 에서 A2 Activity 를 해당 flag 와 함께 띄워도 A stack 에 쌓인다. -taskAffinity 의 기본값은 packageName 이다. -taskAffinity 가 같은 Activ.. 2020. 8. 13.
[Kotlin] check lateinit is initialized (safely accessing lateinit vars) https://blog.jetbrains.com/kotlin/2017/09/kotlin-1-2-beta-is-out/ -Exception in thread "main" kotlin.UninitializedPropertyAccessException 위의 exception 을 마딱뜨린 사람이 은근 많을 것이다.그렇다 저 녀석은 lateinit 이라고 선언된 var 에 값이 assign 되기 전에 접근할 때 생기는 exception 이다. -Kotlin 1.2 에서 추가된 기능이 있는데, 바로 reflection 방식을 이용한 isInitialized 함수이다.lateinit var file:File // ... if (::file.isInitialized) { ... } -reflection 방식이기 때문에.. 2020. 8. 12.
[android] javax.net.ssl.SSLPeerUnverifiedException: No peer certificate https://developer.android.com/reference/javax/net/ssl/SSLPeerUnverifiedException -Peer 의 id 가 verify 되지 않음을 의미한다.certificate 가 없거나, 특정 cipher suite 가 auth 에 사용될 수 없거나, SSL handshaking 단계에서 peer auth 가 이루어지지 않거나 등의 경우로 상대방이 verify 되지 않은 경우를 의미한다. https://medium.com/tech-quizlet/working-with-tls-1-2-on-android-4-4-and-lower-f4f5205629a -TLS 1.2 가 설치되어 있지 않은 단말들은Google Play Service 의 ProviderInstal.. 2020. 8. 11.
[Kotlin] Kotlin 으로 build gradle 을 작성하자! https://proandroiddev.com/migrating-android-app-to-gradle-kotlin-dsl-1-0-c903760275a5 -gradle 4.9 이상 버전부터 사용 가능하다.Kotlin DSL 은 gradle build script 를 지원하는 kotlin 언어이다.( 기존에 우리가 쓰던 것은 groovy ) -Kotlin DSL 은 groovy 방식에 비해 IDE 에서 제공하는 다음의 기능들을 함께 제공한다. Auto-completionContent assistQuick documentationNavigation to source codeRefactoring and much more -android studio 도 최신 버전을 사용하는 것이 추천된다. -kts 는 Grad.. 2020. 8. 10.
[kotlin] safe when statement http://blog.karumi.com/kotlin-android-development-6-months-into-it/ - when 을 expression 으로 사용될 때에는 cover 하지 않는 케이스에 대한 else 가 꼭 필요하다. 하지만 statement 로 사용될 때에는 꼭 쓰지 않아도 괜찮다. (강요되지 않는다.) 이 때문에 모든 case 를 커버하는지 알 수 없었다. 아래와 같이 Any? 에 대한 extension 으로 exhaustive 를 줌으로써 expression 처럼 쓰도록 하여 에러를 줄일 수 있다. val Any?.exhaustive get() = Unit private fun onStatusChanged(status:Status){ when(status){ is Status... 2020. 8. 9.
[kotlin] Sealed class 를 이용하여 error 를 다루는 방법 https://articles.caster.io/android/handling-optional-errors-using-kotlin-sealed-classes/ - private fun parse(url:String): ParsedData{ val result = URL_PARSE_REGEX.find(url) if( result == null){ // what to do here? } val mimeType = result.groupValues[2] val data = result.groupValues[4] return ParsedData(data, mimeType) } data class ParsedData(val data:String, val mimeType:String) 위와 같은 코드가 있다. - .. 2020. 8. 8.
[Kotlin] Coroutine 에 대한 이해 : 기본 용어 및 사용 https://android.jlelse.eu/coroutines-basic-terminologies-and-usage-b4242bd1b2a4 Coroutine 이 뭐냐? -Coroutine 은 suspendable computaion instance 이다.코드 블럭이 life-cycle 을 가지고 생성되고 수행된다는 것이 개념상 thread 와 비슷하지만, 특정 thread 에 bound 되어 있지 않다.한 thread 에서 실행되고, 다른 thread 에서 resume 될 수도 있다.future 와 같이 result 나 exception 으로 종료될 수 있다. -Coroutine 은 lightweight thread 라고 볼 수 있다.여러개의 function 을 async 로 호출할 수 있고, 더 짧.. 2020. 8. 7.