일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Python
- @immutable
- {"msg":"cannot find method
- 레트로핏
- WindowManager$BadTokenException
- onIntercepterTouchEvent
- LaunchedEffect
- isFinishing()
- 터치이벤트 순서
- databinding error
- rememberCoroutineScope
- Android
- Could not find method
- @stable
- effect api
- android.view.WindowManager.BadTokenException
- dispatchTouchEvent
- LaunchedEffect vs rememberCoroutineScope
- 힐트
- android compose
- compose side-effect
- material3
- android compose stable
- @provides @binds 차이
- [databinding]
- 안드로이드
- 안드로이드 다이얼로그 오류
- android mvi
- databinding xml
- Java
- Today
- Total
목록개발기록 (27)
개발관련일지
힐트에 대해서 기본과 궁금했던 부분들 정리 힐트는 안드로이드에서 의존성주입 라이브러리이다. 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 이전..
WindowManager$BadTokenException 처음 보는 오류여서 검색해보았는데 대부분 유저들의 내용으론 화면에 보여질 컨테스트와 다이얼로그의 문제였다 내 경우는 죽은 액티비티에 서브스레드에서 다이얼로그를 요청하는 상황에서 에러가 나온다 생각했다. 위와 같은 상황이었고 서브스레드를 돌려놓고 엑티비티를 종료하니 에러를 만날 수 있었다. 해결방법으론 엑티비티의 종료여부를 보고 다이얼로그를 안띄우는 방식이 있엇다 isFinishing()을 사용해서 아래 코드처럼 해결이 될것이다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 if(! 액티비티.this.isFinishing()){ new MaterialAlertDialogBuilder(액티비티.this) .setTitle("제목") .se..