최근 담당한 앱(A)과 유사한 버전의 또 다른 앱(B)를 출시하게 되었다. 두 앱은 기능적으로는 거의 유사하지만, 그렇다고 또 완전히 스킨만 다른 같은 앱은 아니었다. 아이콘, 스플래시등만 다른 스킨의 앱이었다면 productFlavor 로 관리 했겠지만, A, B앱 둘다 서로 유사하다가도 언제 어느쪽으로 코드가 갈라질지 모르는 상황이었다. 먼저, A앱을 출시한 상태에서 B앱을 개발할때 아래와 같이 관리를 했었다. 1. 두개의 repository 로 각각 관리이 관리 방식은 가장 명확했지만, 관리에 어려움을 겪었다. 예를들어 A.MainActivity 가 변경된다면, B.MainActivity 도 똑같이 변경해줘야 했고, 변경점이 작다면 큰 문제없이 처리할 수 있었지만 대규모 변경에서는 휴먼 에러가..
Android developer site 에서는 아래와 같이 몇가지 코루틴에 대해 권고하고 있다. 선요약 하자면, 1. Repository 에서 coroutine dispatcher 를 하드코딩 하지 마라. 2. suspend fun 는 기본 스레드에서 호출하기에 안전해야 함.3. 비즈니스 및 데이터 레이어에서 코루틴 만들기 Repository 에서 coroutine dispatcher 를 하드코딩 하지 마라.// OKclass NewsRepository( private val defaultDispatcher: CoroutineDispatcher = Dispatchers.Default) { suspend fun loadNews() = withContext(defaultDispatcher)..
* custom view /** * 특정 영역 블러처리 * * 부모 뷰의 특정 영역을 캡처후 블러 적용 */class BlurSurfaceView: View { // 캡처된 화면을 그리기 위한 Canvas 객체 private var canvas: Canvas? = null // 블러 처리를 적용할 Bitmap 객체 private lateinit var bitmap: Bitmap // 이 뷰의 부모 뷰 private lateinit var parent: ViewGroup private var renderScript: RenderScript? = null private lateinit var blurScript: ScriptIntrinsicBlur privat..
Compose mvi 패턴중 가장 많이 쓰이는 두가지 flow 1. StateFlow - 구독자가 구독하기 전까지는 emit 해도 이전 값들은 버려지고 최신상태 하나만 가지고 있음.- 구독자가 구독 하는 순간 현재 가지고 있는 최신 값을 방출. (ui 상태관리 처리에 적합)2. SharedFlow- 구독자가 구독 하건말건 내멋대로 방출- 구독자가 구독한 이후 시점부터 방출되는 데이터를 받을 수 있음 (event 처리에 적함)
정/실수 타입의 파라미터를 받을 때 특정한 범위 내에서만 받고싶을때.. 보통 아래와 같이 하는데, /** * @param testValue 0.0f ~ 1.0f */ fun testRangeFloat( testValue: Float ) { if ((testValue 1.0f)) return // do something.. } @FloatRange or @IntRange annotation 을 활용해 컴파일 타임에서 범위를 제한 할 수 이쓰요 /** * @param testValue 0.0f ~ 1.0f */ fun testRangeFloat( @FloatRange(fro..
fun Context.copyClipBoard(title: String = "", text: String) { runCatching { val clipBoard = (getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager) val clip = ClipData.newPlainText(title, text) clipBoard.setPrimaryClip(clip) }.onSuccess { // 33 부터는 클립보드 매니저에서 복사 시, 시스템에서 토스트 띄워줘서 중복노출됨. if (Build.VERSION.SDK_INT
명사여야 함: DoneButton() 동사 또는 동사구이면 안 됨: DrawTextField() 명사화된 전치사이면 안 됨: TextFieldWithLink() 형용사이면 안 됨: Bright() 부사이면 안 됨: Outside() 명사 앞에는 명사를 설명하는 형용사를 붙일 수도 있음: RoundIcon() https://github.com/androidx/androidx/blob/androidx-main/compose/docs/compose-api-guidelines.md#naming-unit-composable-functions-as-entities
앱을 background 로 내린 뒤, 오랜시간 방치 후 재실행하면 저장해놓은 bundle (arguments, intent...) 이외에는 전부 날아간다. Fragment fragment manager 의 fragment 기록들도 남아있어서. 재실행시 fragment manager 를 기반으로 fragment 를 다시 그리는데, 이때 fragment 의 모든 멤버변수는 다 날아가고 onCreate() 부터 다시 실행됨 이때 화면을 그리는데 필수적인 데이터들을 member var 로 선언해 놓으면 전부 날아가기 때문에 (fragment instance 를 새로 만드는것과 동일) argument 에 저장해 놓고, onCreate 에서 argument 에서 불러와서 다시 초기화 해주는 것이 아니면, frag..
- Total
- Today
- Yesterday
- nodejs
- mysql
- 리눅스
- node.js
- 손석희
- linux
- php
- C언어
- BBC 가쉽
- IOS
- 스위프트
- GIT
- Kotlin
- Phaser
- 뉴스룸
- xcode
- 배열
- 깃헙
- CentOS
- 앵커브리핑
- 노드
- Node
- Asterisk
- Android
- git hub
- 점유율
- C
- 안드로이드
- Swift
- 서버
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |