일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- effect api
- android compose
- 안드로이드 다이얼로그 오류
- 힐트
- android compose stable
- Android
- android mvi
- Python
- databinding xml
- @stable
- onIntercepterTouchEvent
- databinding error
- Java
- compose side-effect
- @provides @binds 차이
- rememberCoroutineScope
- 레트로핏
- @immutable
- {"msg":"cannot find method
- 안드로이드
- WindowManager$BadTokenException
- Could not find method
- [databinding]
- 터치이벤트 순서
- dispatchTouchEvent
- LaunchedEffect vs rememberCoroutineScope
- LaunchedEffect
- material3
- isFinishing()
- android.view.WindowManager.BadTokenException
- Today
- Total
목록전체 글 (28)
개발관련일지
mvi는 먼저 사용한 곳은 Cycle.js 프레임워크이며 함수형 및 리엑티브 형식이다. 해당 프레임워크 창작자는 사용자 상호작용을 리엑티브 함수형으로 처리하기 위해서 MVI 패턴 제안하는거고 안드로이드로 넘어온걸로 보인다. view model intnt를 함수로 나누고 리엑티브로 구성해 서로를 관찰하고 응답하도록 하면서 데이터 흐름이 단반향으로 순환되도록하는게 특징이다. 안드로이드 compose에서 ui갱신이 안된다던지 recomposition이 빈번하게 일어나고 결국 상태를 관리하는게 중요해졌고 상태를 관리하기위해 채택되었다. 안드로이드에서는 view (activity,fragment) ViewModel를 이용해서 상태를 관리하고 있다. MVI는 모델, 인텐트, 뷰 로 되어있는데 유저와의 상호작용하는 ..
힐트에 대해서 기본과 궁금했던 부분들 정리 힐트는 안드로이드에서 의존성주입 라이브러리이다. Dagger2에서 단순하게 만들기 위해서 만들어졌고 Dagger2 기반으로 빌드된다. Dagger2를 사용해본적은 없지만 힐트가 Dagger2에서 파생된거여서 아주 기본적인부분은 정리했다. Dagger2 class MyApplication : Application() { val appContainer = AppContainer() // 컨테이너 선언 } class LoginContainer(val userRepository: UserRepository) { val loginData = LoginUserData() val loginViewModelFactory = LoginViewModelFactory(userRep..
제네릭 관련 헤깔리는게 좀 있어서 아는 지식을 정리함 generic 사전적 의미는 포괄적인 , 통칭(총칭)의 라는 뜻을 가지고 있다. 자바와 코틀린에서 타입을 지정하기 위해 사용한다. 타입 파라미터란 이거다. 구체적인 타입을 인자로 전달하기 위해서 사용한다. 간단한 예시로 제네릭이 없으면 리스트안에 인트고 스트링이고 다 들어가면 런타임중에 타입문제가 발생 할 수 있다. 그리고 해당 타입이 들어간다는걸 명시적으로 알 수 있어서 개발함에 있어서 타입관련해서 타입을 인식할 수 있다. 사용법으론 fun funcName() {} , class className 등으로 사용할 수 있고 여러개도 가능하다. 가장 많이 접한는건 컬렉션 클래스들이지 않을까싶다. 꼭 하나만 사용하는게 아니라 여러개도 사용이 가능하다. pu..
composable은 순수함수 처럼 사용하기위해서 (f(state) = view) side effect가 없는게 좋지만 필요한 경우에는 생명주기를 인식하고 관리되는 환경에서 시행되야함 -> 이걸 도와주는게 Effect API이다. LaunchedEffect 컴포저블내에서 suspend fun을 안전하게 실행해준다. @Composable @NonRestartableComposable @OptIn(InternalComposeApi::class) fun LaunchedEffect( key1: Any?, block: suspend CoroutineScope.() -> Unit ) { val applyContext = currentComposer.applyCoroutineContext remember(key1) ..
컴포즈에서 @stable 어노테이션을 봤는데 뭔지 몰라서 알아보게됨 리컴포지션이랑 관련이 있따. 리컴포지션은 인풋값이 변경 될떄 컴포저블 함수를 다시 호출 하는 과정인데 stable(안정성)을 이용해서 런타임중에 파라미터중에 어느것도 업데이트 되지 않았다라는 것을 확신을 하거나 변경을 확인한 이력이 있는 경우의 변경된게 없을 경우 스킵을 한다. 컴포즈의 상태가 변경 될 떄 컴포즈내에 상태객체가 읽히는 모든 지점위의 가장 가까운 재시작가능한 함수를 찾는다(리컴포지션을 최소화하기위함). 로우,컬럼,박스 같은 기본 컴포저블들은 인라인함수로 동작 -> 컴파일 후 함수로 되어있지 않기 때문에 리컴포지션 시작지점이 될 수 없다. 부모로 부터 자식노드까지 변경된 파라미터가 있는경우 재생성된다. 이렇게 컴포저블의 파라..
안드로이드 컴포즈 학습하는 도중 material3 theme , 사이즈 변화에 대해서 어떻게 대응하나 학습하기 위해 Reply 샘플앱 대해서 전체적인 구조를 파악하기 위해서 학습 Jatpack Compsose는 M3를 사용할 수 있는 구현체를 제공하고 있으며 M3가 적용된 프로젝트를 생성하면 theme 디렉토리가 있고 기본적으로 Color, Theme , Type 세개의 파일이 생성 되어있다. color scheme과 typography를 정의하고 MateralTheme에 적용이 가능하다. Color Scheme에서 주요색상을 기준으로 톤을 변경하면서 M3의 컬러 유틸리티 색상파레트를 이용한다. 각 색상값들이 슬롯(이름)이 존재한다. 색상들을 미리 정의해놓고 theme를 사용한다. 위의 사진이 M3에서 ..
첫번째 java.lang.IllegalStateException: Could not find method @{(v) -> item.listener.onItemClick android:onClick="@{(v) -> item.listener.onItemClick(v , item) " ★ } 빠짐 이런식으로 나오는 경우 xml파일에 선언한 부분에서 오타가 있는지 확인 나같은 경우는 } 하나 빠져있엇음 두번째 [databinding] {"msg":"cannot find method onItemClick(android.view.View, 선언된클래스위치) in class xml경로 , "pos":[{"line0":17,"col0":34,"line1":17,"col1":82}]} android:onClick="@..
안드로이드에선 앱에 저장소가 2가지가있다. 내부 저장소(Internal Storage) , 외부 저장소(External Storage) 내부저장소 해당 앱의 private 공간이며 다른앱에서 접근이 불가능하다 노출되면 안되는 앱의 데이터가 사용되게 된다. 위의 내용으로 구성 되어져있다 외부저장소 public하게 공개되는 공간이다. 권한만 있게되면 엑세스가 가능하다. 외부저장소가 안드로이드Q (api29)부터 구조가 바뀌었다. api29를 기준으로 이전의 스토리지 형태를 다르게 부른다. version legacy storage version >- api29 -> scoped storage 구조를 이해하는데 가장 도움이 되었던 글이다. 출처 legacy storage (안드로이드 Q 이전..