adb shell dumpsys deviceidle force-idle adb shell dumpsys deviceidle force-idle: 즉시 Doze 모드로 진입adb shell dumpsys deviceidle unforce: Doze 모드 강제 해제adb shell dumpsys deviceidle step: Doze 모드의 다음 단계로 진행 ACTIVE: 일반적인 사용 상태IDLE_PENDING: Doze 모드 진입을 준비하는 상태SENSING: 센서를 통해 기기의 움직임을 감지하는 상태LOCATING: 위치 서비스를 확인하는 상태IDLE: Doze 모드 진입 상태IDLE_MAINTENANCE: Doze 모드에서 주기적으로 깨어나는 상태
fold 구현public inline fun Iterable.fold( initial: R, operation: (acc: R, T) -> R): R 초기값에서 시작해서, 컬랙션 각 요소를 차례로 처리하면서 누적된 결과 반환 예1 > 숫자 합val numbers = listOf(1, 2, 3, 4)val sum = numbers.fold(0) { acc, num -> acc + num }println(sum) // 10 예2> 문자열 연결 val words = listOf("a", "b", "c")val result = words.fold("Start: ") { acc, s -> acc + s }println(result) // Start: abc 예3> 리스트 역순으로 만들기(하지만, ..
union두 Iterable 을 합쳐서 중복 없는 set 생성 val a = listOf(1, 2, 3)val b = listOf(3, 4, 5)val result = a union bprintln(result) // [1, 2, 3, 4, 5] allhof (고차함수) parameter 조건 판단 (단, 비어있는 배열은 무조건 true 임)Iterable 내의 모든 요소가 조건을 만족하면 true, 하나라도 만족하지 않으면 false * 모든 숫자가 양수인지 판단val numbers = listOf(1, 2, 3, 4, 5)val result = numbers.all { it > 0 }println(result) // true val numbers = listOf(1, -2, 3)val resul..
distinctIterable 의 중복된 값 제거 후 list 반환 val list = listOf(1, 2, 2, 3, 3, 3, 4)val distinctList = list.distinct()println(distinctList) // 출력: [1, 2, 3, 4] Iterable 이 custom data class 인 경우 data class User(val name: String)val users = listOf( User("Alice"), User("Bob"), User("Alice"))val result = users.distinct()println(result)// 출력: [User(name=Alice), User(name=Bob)]- 해당 클래스의 hashCode, e..

최근 담당한 앱(A)과 유사한 버전의 또 다른 앱(B)를 출시하게 되었다. 두 앱은 기능적으로는 거의 유사하지만, 그렇다고 또 완전히 스킨만 다른 같은 앱은 아니었다. 아이콘, 스플래시등만 다른 스킨의 앱이었다면 productFlavor 로 관리 했겠지만, A, B앱 둘다 서로 유사하다가도 언제 어느쪽으로 코드가 갈라질지 모르는 상황이었다. 먼저, A앱을 출시한 상태에서 B앱을 개발할때 아래와 같이 관리를 했었다. 1. 두개의 repository 로 각각 관리이 관리 방식은 가장 명확했지만, 관리에 어려움을 겪었다. 예를들어 A.MainActivity 가 변경된다면, B.MainActivity 도 똑같이 변경해줘야 했고, 변경점이 작다면 큰 문제없이 처리할 수 있었지만 대규모 변경에서는 휴먼 에러가..
* 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..
코루틴 job cancel 은 취소 요청. job.cancel() 이후에 job.isCancelled = true 로 보장받으려면, cancelAndJoin() 을 사용해야함. suspend fun 이기 때문에 coroutine 안에서 사용할 것 /** * Cancels the job and suspends the invoking coroutine until the cancelled job is complete. * * This suspending function is cancellable and **always** checks for a cancellation of the invoking coroutine's Job. * If the [Job] of the invoking coroutine is c..
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
- Total
- Today
- Yesterday
- mysql
- 뉴스룸
- Android
- 깃헙
- 리눅스
- 배열
- 스위프트
- 서버
- CentOS
- Node
- 손석희
- php
- nodejs
- 안드로이드
- 점유율
- git hub
- 앵커브리핑
- 노드
- BBC 가쉽
- xcode
- GIT
- Swift
- Kotlin
- C언어
- linux
- Phaser
- Asterisk
- IOS
- C
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |