전체 글 411

코루틴 Coroutine

# Coroutine Android Developer 에서의 정의 “비동기적으로 실행되는 코드를 간소화 하기 위해 Android 에서 사용할 수 있는 동시 실행 설계 패턴” 코루틴은 Android의 비동기 프로그래밍에 권장되는 솔루션입니다. 주목할 만한 기능은 다음과 같습니다. 경량: 코루틴을 실행 중인 스레드를 차단하지 않는 *정지*를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있습니다. 정지는 많은 동시 작업을 지원하면서도 차단보다 메모리를 절약합니다. 메모리 누수 감소: *구조화된 동시 실행*을 사용하여 범위 내에서 작업을 실행합니다. 기본으로 제공되는 취소 지원: 실행 중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다. Jetpack 통합: 많은 Jetpack 라이브러리에 코루틴을..

Android 뷰페이저2

# ViewPager 동작 ViewPager는 PagerAdapter 기반으로 구성되어있는데 스크롤을 진행할 때 마다 instantiateItem()와 destroyItem() 메서드가 호출 기존 뷰페이저의 문제 뷰페이저가 버벅인다 -> 고안해낸 방법이 PagerSnapHelper를 이용해서 RecyclerView로 해결 하였다고 한다. PagerSnapHelper RecyclerView를 집어넣고 Pager의 느낌을 내기 위하여 PagerSnapHelper를 이용하여 해결 확장이 어렵고 cost가 든다. 결국 ViewPager2가 나왔다. RecyclerView의 장점을 가지고와서 만듬. ViewPager2에서 어댑터를 만들 때 RecyclerView.Adapter를 이용해서 만들어 준다. ViewPa..

비동기 처리 - 블로킹과 논블로킹

# Android Single Thread 안드로이드의 애플리케이션을 실행하면 시스템은 메인 액티비티를 메모리로 올려 프로세스를 만들며, 이 때 메인 스레드가 자동으로 생성 메인 스레드는 안드로이드의 주요 컴포넌트를 실행하는 곳이자 UI를 그리거나 갱신하는 일을 담당 하지만. 이 스레드만으로는 원하는 작업을 모두 처리할 수 없음. 왜냐면 긴 작업은 메인 스레드를 블럭할 수 있음. 따라서 안드로이드는 비 동기적으로 실행되는 코드를 작성해야만 함. 화면에 무엇인가를 표시하는 작업 말고, 내부적으로 돌아가는 작업이 필요함. # sync, async, blocking, non-blocking # Blocking(블로킹)과 Non-blocking(논블로킹) 1) 블로킹 블로킹은 A 함수가 B 함수를 호출하면, 제..

안드로이드 스튜디오 JAVA_PATH 설정 및 APK 빌드

문제 : android studio를 통해서 APK 빌드를 하여 배포하려고 하였다. 1. 클린하고 # ./gradlew clean 2. 디버그 버전으로 apk 빌드 # ./gradlew assembleRealLogOnStagingDebug 에러나는 경우 java.lang.IllegalAccessError: class org.gradle.internal.compiler.java.ClassNameCollector (in unnamed module @0x42eadbce) cannot access class com.sun.tools.javac.code.Symbol$TypeSymbol (in module jdk.compiler) because module jdk.compiler does not export com..

개발설정 2022.04.06

RecyclerView setHasFixedSize

리사이클러뷰에 새로운 아이템이 삽입되거나, 기존의 아이템이 제거될 때 호출되는 메소드를 매우 함축하여 간결히 표현한 코드이다. void onItemsInsertedOrRemoved() { if (hasFixedSize) layoutChildren(); else requestLayout(); } 코드를 보면 hasFixedSize 가 true 인 경우 layoutChildren() 을 호출하고, 만약 false 라면 requestLayout() 을 호출하게 된다. requestLayout() View 의 색깔 및 모양이 아닌 크기가 변화할 때 requestLayout() 을 호출하여 다시 ViewGroup 에 속한 뷰들의 크기 측정부터, 자신의 크기 측정까지 일일히 수행한다고 했다. 결론 우리는 setHa..

안드로이드 2022.03.29

안드로이드 APK 아무나 삭제 못하도록 하는 adb 명령어

삭제 못 하도록 설정하기 adb shell dpm set-device-owner {패키지명}/.AdminReceiver 삭제 다시 할 수 있도록 권한 풀기 adb shell dpm remove-active-admin {패키지명}/.AdminReceiver .AdminReceiver는 안드로이드 기기관리자 검색하면 됩니다 https://n00bh4cker.tistory.com/108 안드로이드 기기관리자 사용하기 1. 메니페스트 설정하기 리시버를 만들고 권한에 BIND_DEVICE_ADMIN을 허용해주어야한다 메타데이터도 선택이 아닌 필수!! 인텐트 필터를 만들고 안에 액션으로 DEVICE_ADMIN_ENABLED 속성을 주어야 한다 2. n00bh4cker.tistory.com

안드로이드 2022.03.28

Android Adb(Android Debug Bridge) Path 설정(MAC)

터미널에서 adb 명령어를 사용해도 -bash: adb: command not found 만 발생 하였다 MAC에서 사용하려면 PATH 를 지정 해줘야 하는것 같다. bash 쉘에서 사용자의 환경설정을 저장하는 .bash_profile 파일이 있는지 체크 ls -l -a .bash_profile .bash_profile이 없다면 새로 생성 touch -c .bash_profile .bash_profile 수정 open -e .bash_profile export문을 .bash_profile에 추가 (username에 자기의 폴더명으로) export PATH=$PATH:/Users/username/Library/Android/sdk/platform-tools/ bash_profile 실행 source .ba..

안드로이드 2022.03.28

Android WebView (React 서비스 화면과 통신)

웹뷰 작업을 하던 도중에 React로 작업된 화면과 통신하는데 브릿지를 이용해서 웹 -> 안드로이드는 호출이 되었지만 안드로이드 -> 웹 (자바스크립트 loadUrl)이 호출이 되지 않았다. webview.evaluateJavascript를 통해 호출이 되었다. 실제 테스트 함수명 : AndroidBridge 안드로이드에서 실제 호출 출처 : https://junhyunny.github.io/react/android/react-android-webview-communication/

안드로이드 2022.03.21

LiveData 데이터가 100% 들어오지 않을 때

코딩을 하던 도중 Test Code를 짯고 LiveData를 이용해서 데이터 Update를 시켜주는 작업을 하고 있었다. 하지만, 리스트를 가져오는 두개의 함수에서 하나의 결과만 Update가 되었다. 1) Observer가 Active하지 않은 경우 Observer 클래스로 표현되는 관찰자의 수명 주기가 STARTED 또는 RESUMED 상태이면 LiveData는 관찰자를 활성 상태로 간주합니다. LiveData는 활성 관찰자에게만 업데이트 정보를 알립니다. LiveData 객체를 보기 위해 등록된 비활성 관찰자는 변경사항에 관한 알림을 받지 않습니다. '활성 상태'가 아닌 observer는 LiveData의 값 변경을 인식할 수 없다는 것이다. 활동이나 프래그먼트에 활성 상태가 되는 즉시 표시할 수 ..

안드로이드 2022.03.16