Android
-
LiveData와 Flow: Android UI 데이터 관찰의 두 가지 접근 방식 비교Android 2024. 11. 26. 11:06
// LiveDataisViewVisible.asLiveData().observe(viewLifecycleOwner) { isVisible -> // ...}// FlowisViewVisible.collect { isVisible -> // ...}두 코드 스니펫은 `isViewVisible`이라는 상태를 관찰하여 UI를 업데이트하는 방식에서 차이가 있습니다. 이 두 가지 접근 방식의 주요 차이점은 다음과 같습니다.`asLiveData().observe()` 사용:LiveData: Android의 생명주기 인식 데이터 홀더 클래스로, 주로 UI 컴포넌트와 데이터의 동기화를 위해 사용됩니다.생명주기 인식: `observe(viewLifecycleOwner)`를 사용하면 관찰자가 `viewLifecycleO..
-
OpenGL Basics on AndroidAndroid 2024. 5. 3. 22:58
목표OpenGL 기본개념 알기Android에서 OpenGL로 삼각형 그리기OpenGL ES란?OpenGL ES는 3차원 컴퓨터 그래픽스 API인 OpenGL(Open Graphic Library)의 임베디드 시스템을 위한 버전이다. ES가 Embaedded System을 의미한다.OpenGL은 다양한 API를 제공하며 해당 API들을 통해 점, 선, 삼각형, 사각형, 빛 등을 화면에 그릴 수 있다. 즉, OpenGL은 화면에 뭔가 그릴 수 있도록 도와주는 API들로 이루어진 라이브러리다.비슷한 API로 Windows에는 DirectX가 있다. 차이점은 OpenGL은 크로스 플랫폼을 지원한다.Vertex3차원 그래픽의 가장 원자적인 요소정점의 정보를 가지고 있는 data structurePosition을 ..
-
Dependency Injection과 Hilt 맛보기Android 2024. 5. 3. 20:38
Dependency의존성 : A가 B를 의존한다. = A가 B를 참조한다.의존대상 B가 변하면, 그것이 A에 영향을 미친다.B의 기능이 추가 또는 변경되거나 형식이 바뀌면 그 영향이 A에 미친다.Car는 Engine이 없으면 동작하지 않는다.Engine은 Car의 의존성Car가 Engine에 의존한다. = Car가 Engine을 참조한다.// Without DIclass Car { private val engine: Engine = Engine() ... ...}Car class는 engine instance 생성과 어떻게 구성하는지까지 책임을 지고 있다.SRP(단일 책임 원칙) 위반하나의 Class에 하기에는 책임이 많다.Car와 Engine은 타이트한 의존성을 갖는다.Engine에 대..
-
안드로이드 SQLite 속도 향상!Android 2013. 3. 26. 18:48
출처 : http://osh2357.blog.me/130098179373안드로이드에서 사용하는 SQLite 는 모바일에서 가볍게 사용하기에 너무 좋다. 하지만 다수의 Insert 문을 반복할때의 수행속도는 입이 쩍벌어지게 느렸는데...... 원인을 파해쳐보니 SQLite 에서는 Transaction을 사용하고 안하고의 차이가 다량 Insert 시 엄청난 시간 차이를 보여주고 있었다. 다음 사이트의 Insert Test 를 보면 이해가 되리라 -> http://www.sqlite.org/speed.html 1000 건의 record 를 Insert 했을시에SQLite 는 13.061 초MySQL 은 0.114 초가 걸린다 반면에 25000 건의 record 를 Transaction 을 이용하여 Insert..
-
Error generating final archive: Debug certificate expired on ... 문제해결법Android 2013. 3. 13. 16:01
Error generating final archive: Debug certificate expired on ... 이클립스에서 안드로이드 애플리케이션 빌드 중에 이런 오류 메시지가 나오는 경우가 있다. Debug certificate가 만료되어서 발생하는 문제인데, Debug certificate는 만들어진 후 365일이 지나면 만료된다. 그러므로 만료된 Debug certificate를 새로 갱신해주면 된다. 방법은 간단하다. debug.keystore 파일을 삭제한 후, 프로젝트를 클린하면 이 debug.keystore파일 생성해준다고 모든 사이트들이 알려주나 나의 경우는 절대 다시 생성되지 않았다. 콘솔창으로 debug.keystore가 저장되있던 경로로 이동한후 아래의 명령어로 생성해준 후에야 ..
-
xml에서 include로 포함한 뷰들의 inflate여부Android 2012. 11. 13. 18:34
layout xml을 만들때 다른 xml layout을 include라는 명령어로 포함시킬수 있습니다. 반복적으로 사용되는 layout인경우 자주이렇게 합니다. 여기서 생긴궁금증 include가 포함된 xml레이아웃을 setContentView등으로 inflate를 시킨다면 include된 xml레이아웃 안의 뷰들도 inflate되어 바로 사용할 수 있을까? 정답은 가능합니다. 가령 이런경우 레퍼런스 사이트에서는 layout_textview xml안에있는 뷰들을 소스코드에서 사용하려면 위의 예제처럼 id를 주어 먼저 불러오고 사용하게 되있습니다. 가령 이런식입니다. // layout_textview를 받아온다. layout_textview를 받아온 View textView 객체는 하위 자식들을 그대로 포..
-
JNIEnv* 와 jclassAndroid 2012. 11. 13. 15:24
JNIEnv*JNI 인터페이스 포인터는 자바 메쏘드와 매핑되는 각 네이티브 함수(i.e., c/c++ 함수)를 위한 매개 변수로 전달된다. 이 포인터(매개변수)는 JNI환경에 있는 함수들과 상호작용하도록 해 준다. JNI 인터페이스 포인터는 저장될 수 있으나 오로지 현재의 쓰레드(동작 중인 쓰레드)에서 유효한 상태(사용 가능한 상태)로 유지된다. 다른 쓰레드들(정지 혹은 휴면 상태로 된 쓰레드들)은 먼저 반드시 AttachCurrentThread() 메소드를 호출하여 VM에 자신을 연결하고 JNI 인터페이스 포인터를 획득해야 한다. 일단 연결이 되고 나면 네이티브 쓰레드는 네이티브 메쏘드에서 동작하는 정상적인 자바쓰레드처럼 동작한다. 이 네이티브 쓰레드는 자신이 연결 해제하기 위해 DetachCurren..
-
JNI를 Xcode이용하기Android 2012. 11. 13. 12:03
JNI를 공부하는데 Mac에서는 C혹은 C++코딩을 하기위해서는 Xcode를 이용해야한다. 그러나 Xcode를 이용해본적이 없는 나로서는 어려웠다. http://crystalcube.co.kr/119 이 블로그의 글에서 친절히 설명이 나와있었다 그러나 한가지점 User Header Search Paths에 jni.h 헤더파일이 있는 경로를 추가해줘도 계속 jni.h file not found. 에러가 뜨면서 동작하지 않았다. 이 문제는 User Header Search Paths가 아니라 Header Search Paths에 추가해줌으로써 간단히 해결되었다.