본문 바로가기

프로그래밍/Android7

[Android] Android Thread, Looper, Handler Android MainThread Android 에서 App process가 시작되면 MainThread가 시작되는데 MainThread가 UI를 유일하게 수정할수 있는 Thread이기 때문에 MainThread라 하면 일반적으로 UI Thread라고 한다. (예외적으로 UI를 가지지 않는 Service, BroadcastReciver, application 경우에는 UI Thread라고 부르는것이 적절하지 않다.) 일반적으로 어플리케이션에서는 성능을 위해 Multi Thread를 사용합니다. 그러나 UI를 업데이트 하는데는 Single Thread를 주로 사용하는데 이는 UI를 업데이트하며 교착상태, 데드락 등을 방지해야 하기 때문이다. Java 어플리케이션 에서는 main() 메소드로 실행되는 것이 .. 2021. 10. 18.
[Android Studio 4.0] 갑자기 파일내용이 다르게 나오는 현상 최근 갑자기 소스코드중 일부가 이상한 문자열로 바뀌는 현상이 발생했습니다. 처음에는 복붙 실수거나 git오류이거나 싶었으나 지속적으로 같은 문제가 생겨 관련 내용을 검색해보니 Android Studio 3.x.x에서 생긴 cache오류로 인해 발생한 문제라고 합니다. - IDE 내부 모습 해결방법은 간단하게 아래 경로의 폴더를 삭제하면 정상적으로 돌아오게됩니다. C:\Users\my_user_name\.AndroidStudio4.0\system\caches 2020. 8. 30.
[Android]DataBinding 오류잡기 데이터 바인딩을 통해 RecyclerView를 bind하려고 작업하던 중 @BindingAdapter()를 쓰기위해 apply plugin: 'kotlin-kapt'를 추가하게 되었는데 org.jetbrains.kotlin.gradle.internal.KaptExecution 오류가 나기 시작했다 인터넷에 관련 자료를 찾아봐도 JAVA 버전이 1.8로바꾸면 해결된다는 게시글 외에 별다른 해결책을 찾지 못했고 결국 @BindingAdapter()를 추가하기 전으로 상태를 되돌렷는데 이번에는 data binding error: cannot find symbol class ... Impl MalformedByteSequenceException: 1 ( ) 1 Ʈ UTF-8 이 두가지 에러가 나오기 시작했다 c.. 2020. 8. 20.
Android 디자인패턴별 장단점 비교 (MVC, MVP, MVI, MVVM, SVG) MVC 패턴 View Model 1. 모든 입력은 Controller로 전달되고 2. Controller는 입력에 해당하는 Model을 업데이트한다 3. 업데이트 결과에 따라 Controller는 View를 선택한다 (1:N구조) 4. View를 업데이트하기위해 View가 Model을 직접이용하거나 Model에서 View에서 notify하여 업데이트 결국 View를 업데이트하기 위해서는 결국 M-V사이에 의존성이 생기게 된다 안드로이드는 Activity에서 View와 Controller모두 처리하기때문에 적합하지 않음 MVP 패턴 View Presenter Model MVP는 Model, View, Presenter 로 구성되어있으며 View : Input UI라 할수있고 Button, Text등의 Ev.. 2020. 3. 24.
[Android] Layout Start, End, Left, Right 차이점 글을 쓸때 왼쪽 정렬인 문화와 오른쪽정렬인 문화가 있다고 한다 안드로이드는 전세계적으로 사용하는 os이기때문에 레이아웃을 만들때 국가별로 레이아웃을 수정 할 수는 없으니 우리나라 같은 왼쪽 정렬문화에서는 Start = left End = Right 로 적용이되고 오른쪽 정렬 문화에서는 Start = Right End = Left 로 적용이된다고한다 2019. 12. 3.
[Android] assets 에서 음악재생 AssetFileDescriptor afd = getAssets().openFd(sound); player = new MediaPlayer(); player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); player.prepare(); player.start(); 2019. 9. 2.