안드로이드
[안드로이드] Recyclerview, ListAdapter 순서 변경 문제
최근 기존에 개발된 앱을 코틀린으로 마이그레이션 하고 리팩토링 작업을 진행 하고있습니다. 코루틴을 사용하지 않았던 기존 앱은 SQLITE Query 실행 완료 타이밍에 맞춰 RecyclerView List 변경을 어떻게 하면 좋을지 많은 고민과 이게 맞나? 싶은 부분이 많았지만 우여곡절 끝에 릴리즈 하고 안정화했었는데, 이번에 코루틴 Flow을 적용하면서 이게 맞나?라는 고민 또한 해결되었습니다. 1. ListAdapter 도입 이유 또한 효율적인 RecyclerView 관리를 위해 ListAdapter를 도입하기로 했습니다. 기존의 RecyclerView는 DataSetChanged()를 이용해서 전체 Item을 갱신하도록 하는데, 갱신 비용이 많이 들어갑니다. 문제 해결법으로 DiffUtil을 사용하..
[안드로이드] SQLite Cursor 사용에 관한 고찰
가이드라인이 정해져있어 편리한 ORM Room에 비해 SQLite만 사용할 때는 가이드라인이 확실치 않아 고민되는 부분이 많다. cursor와 Database의 close시점 그리고 MainUIThread에서의 SQL 사용 등 아직 개념이 확실히 정립되지 않아 이 글을 수정해가면서 공부한 내용을 천천히 정리해 보고자 한다. 1. 꼭 백그라운드에서 작업을 해야하나? 이 부분에 대해서 많이 고민했고 여러 글들을 찾아봤다. 결론은 "처리할 데이터의 개수에 따라 다르다."이다. SQL을 UI Thread에서 수행하면 수행되는 시간 동안 UI Thread가 멈춰서 사용자에게 앱 전체가 멈춘 느낌을 준다. 사용자가 앱이 느려짐을 느끼는 시간은 100~200ms라고 한다. 그리고 일정 시간이 경과하면 ANR(애플리케..
[안드로이드] 서비스 startCommand에 관하여
안드로이드는 사용자에게 보이지 않는 기능들을 구현할 수 있도록 Service를 제공합니다. 서비스는 백그라운드 서비스(Background Service), 포그라운드 서비스(Foreground Service), 바인딩 서비스(Bound Service)로 나눌 수 있습니다. 1. 백그라운드 서비스는 UI의 뒤에서 실행되는 서비스를 말하며 사용자에게 실행 여부가 보이지는 않습니다. 개별의 애플리케이션 구성 요소로 동작하며 앱이 실행 중에는 종료되지 않으나 Background 상태로 진입시 서비스의 동작을 보장하지는 않습니다. 안드로이드의 메모리 정책에 의해 종료될 수 있습니다. 2. 포그라운드 서비스의 동작은 백그라운드 서비스와 동일하게 사용자에게 보이지 않는 서비스를 제공하나 Notification 을 통..
[안드로이드] 애니메이션 Interpolator 에 관하여
안드로이드는 자체적으로 애니메이션을 지원합니다. 그 중 Interpolator는 보간 즉 시작지점과 종료지점을 연결하는 효과를 말합니다. https://developer.android.com/reference/android/view/animation/BaseInterpolator BaseInterpolator | Android Developers developer.android.com 1. AccelerateInterpolator : 시작지점에서 가속하여 종료지점에 도달합니다. 2. AnticipateInterpolator : 시작지점의 뒤쪽으로 이동한 다음 종료지점에 도달합니다. 3. OvershootInterpolator : 시작지점에서 시작해 종료지점을 지나쳐 다시 종료지점에 도달합니다. 4. Bo..
[안드로이드] Android studio Arctic Fox 버전 이후 gradle allprojects 추가방법
안드로이드 스튜디오 버전을 업데이트하고 신규 프로젝트파일을 생성했습니다. 라이브러리 추가가 필요해서 jcenter와 jitpack.io 레포지토리 등록을 평소처럼 프로젝트 단위의 build.gradle에서 추가하고 Sync하는데 아래와 같은 오류 메시지와 함께 빌드 되지 않았습니다. [build.gradle - project] . . allprojects { repositories { google() mavenCentral() maven { url "https://jitpack.io" } jcenter() // Warning: this repository is going to shut down soon } } . . > Build was configured to prefer settings reposit..
[AWS Lightsail-ubuntu] 메모리가 부족해서 MYSQL이 설치가 안된다?
sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile # /etc/fstab /swapfile none swap sw 0 0 sudo reboot #재시작 후 스왑메모리 생성확인 swapon -s 참고 : https://www.nemonein.xyz/2019/10/2587/ AWS Lightsail, 설치(소감?) – 바깥 세상으로 www.nemonein.xyz 덕분에 장장 6시간만의 삽질이 끝이났습니다.
[안드로이드] 앱 재시작 방법 (Android app restart programmatically)
데이터베이스 복원이나 언어설정 등 환경변수의 변경으로 앱 자체를 완전히 재시작해야 하는 경우가 있습니다. 이럴때 아래 코드를 이용하여 앱을 재시작할 수 있습니다. PackageManager packageManager = getPackageManager(); Intent intent = packageManager.getLaunchIntentForPackage(getPackageName()); ComponentName componentName = intent.getComponent(); Intent mainIntent = Intent.makeRestartActivityTask(componentName); startActivity(mainIntent); System.exit(0);
[안드로이드] String객체 null Check
JAVA 기준 String str; 1. if(str != null) 또는 2. if(TextUtils.isEmpty)를 사용해서 Null Check 할 수 있습니다. TextUtils.isEmpty 은 Null 뿐만 아니라 공백인지까지 검사합니다.