일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 셀룰로오스-g-폴리락타이드 공중합체
- 1회용 플라스틱컵
- var 와 val
- 스레드 #코루틴
- apk이름변경
- 안드로이드 스튜디오 애뮬레이터
- TwomonUSB
- 코루틴 job
- 플라스틱 생분해
- 모의위치 주입
- json 저장
- 토글 험수
- 안드로이드 mvvm
- Room 데이터베이스 업데이트
- 안드로이드스튜디오 jdk
- 코틀린 이미지저장 #파일저장
- TowmonUSB 연결오류
- 코틀린 트리거 버튼
- #큐구조 #큐다운로드
- compse state
- livedata
- 안드로이드 sms
- bluetoothmanager
- 안드로이드 비콘
- viewmodelscope
- 라이브데이터 postValue
- 1회용컵
- compse collectAsState
- withContext
- 비콘스캐닝
- Today
- Total
목록안드로이드 개발/개발팁 (27)
EnjoyLife
fun isServiceRunning(serviceClass: Class): Boolean { val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as? android.app.ActivityManager ?: return false return try { activityManager.getRunningServices(Int.MAX_VALUE) .any { it.service.className == serviceClass.name } } catch (e: Exception) { false } }
신규 Android 앱을 만들 때는 JDK 17을 사용하는 것을 권장드립니다. 그 이유를 정리해 보면 다음과 같습니다.LTS(장기 지원) 안정성JDK 17은 2021년 9월에 나온 LTS 버전으로, 버그 픽스·보안 업데이트가 최소 2029년까지 지원됩니다.JDK 21 역시 LTS이지만 출시(2023년 9월)가 비교적 최근이라, Android 생태계 전반에서 아직 검증·호환성 테스트가 충분히 이뤄지지 않았습니다.Android Gradle Plugin(AGP) 호환성현 시점(2025년 기준) Android Studio·AGP 공식 문서 상으로는 JDK 17까지 안정적으로 지원됩니다.JDK 21을 쓰려면 Gradle 8.5 이상, AGP 8.5 이상으로 모두 업그레이드해야 하는데, 일부 서드파티 플러그인이나 ..
✅ viewModelScope를 사용하는 상황 (📦 데이터 중심, 오래 살아야 함)예시이유✅ 타이머 기능화면 회전해도 계속 돌아야 하니까✅ API 데이터 요청 후 LiveData로 저장화면이 없어져도 데이터는 살아 있어야 하니까✅ 검색어를 입력하면 자동 추천어 받아오기ViewModel이 처리하고, 결과만 View에 넘김✅ 앱 실행 시 초기 데이터 로드 (캐시, 설정 등)화면보다 오래 살아야 함✅ 파일 다운로드 중 상태 유지화면이 닫혀도 계속 다운로드돼야 함 👉 특징: UI에 직접 영향을 안 주고, 상태 관리나 데이터 처리에 집중된 작업✅ lifecycleScope를 사용하는 상황 (🎨 UI 중심, 화면에 종속)예시이유✅ 토스트 보여주기화면이 사라졌는데 토스트 뜨면 앱 죽음 😨✅ 다이얼로그 띄우기/..
제발 코루틴으로 바꿔주세요. ㅠㅠ 제가 마주한 앱이 아래 유형의 앱이라 절망에 빠져 글을 상소문을 올립니다. 아직도 자바+ 스레드+ 콜백지옥+ 액티비티 몰빵(api 로직,데이터로직,UI로직) 형식으로 구현됨. 코루틴과 워크매니저는 아래 상황일때 적절하게 골라서 사용하세요. 상황추천 방식일반적인 백그라운드 작업✅ Coroutine (Dispatchers.IO)여러 작업을 순차 or 병렬 처리✅ Coroutine + launch {} or async {}앱이 종료되어도 작업 유지해야 함✅ WorkManagerJava 기반에서 코루틴 도입이 어려움✅ ExecutorService아주 단순한 Handler 메시지 처리⚠ HandlerThread (지양하지만 가능) ❗ Thread 직접 사용의 치명적인 문제..
안드로이드앱에서 주로 사용하는 네트워크 통신,db 기능을 기반으로 공통적으로 제가 사용하는 패턴입니다. app/├── data/│ ├── local/ │ │ ├── SampleEntity.kt // Room 엔티티│ │ ├── SampleDao.kt // Room DAO│ │ └── AppDatabase.kt // Room Database (싱글톤)│ └── remote/│ ├── ApiService.kt // Retrofit API 인터페이스 (독립적 구현)│ └── SampleData.kt // 네트워크 데이터 모델├── repository/│ └── SampleRepos..

출처:https://developer.android.com/training/data-storage/room?hl=ko 앱 안에서 데이터를 저장하고 사용하는 과정을 학교 도서관으로 비유하겠습니다.Room Database: 도서관(책을 저장하는 큰 장소)Entities: 책 한 권(내용을 저장하는 틀,ex 붕어빵 틀)DAO: 사서 선생님(책을 빌려주고, 다시 넣어주는 역할)Rest of The App: 학생(책을 읽고 싶어서 도서관을 이용하는 사람)앱이 도서관처럼 데이터를 정리하고 꺼내 쓰도록 돕는 것이 Room 입니다. 프로세스 학생(사용자): 책 정보를 입력하거나 요청해."책 제목은 '코틀린 배우기', 저자는 '홍길동', 출판 날짜는 '2024-12-10'이야. 이 책을 저장해 줘!"또는 "내가 저장한 ..
// 다운로드 대기열을 저장하는 리스트, 두 번째 요소는 Any 타입으로 파라미터로 대체 가능private val downloadQueue = mutableListOf>()var isDownloading = falsefun main() { // 대기열에 항목 추가 addToDownloadQueue("http://example.com/file1.zip", "day1", 1) addToDownloadQueue("http://example.com/file2.zip", "day2", 2) addToDownloadQueue("http://example.com/file3.zip", "day3", 3) // 특정 pos 값을 가진 항목 제거 removeFromDownloadQu..
둘다 val 타입이지만 각각 mutableList,list 타입인 변수 val displayList1: MutableList = mutableListOf("Apple", "Banana", "Cherry", "Date") val displayList2: List = listOf("Apple", "Banana", "Cherry", "Date") "MutableList 형을 쓰면 무조건 쓰기가 가능하다는 것이니, 무조건 var 를 써야이 무슨 소리야?" 생각할 수있다. 나도 그랬으니까. "헷갈리니 그냥 var 로 무조건 쓸래" 할수 있다. 이건 유지보수할 경우, 아주 치명적인 후회로 남을수 있다. val displayList1: MutableList ㄴ 리스트의 항목 추가,수정은 가능하지만, 새로운 리스트로 ..