일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DataBinding
- 개발
- 앱
- 코틀린
- 티스토리
- 내 맘대로 정리한 안드로이드
- github
- Unity
- firebase
- 카페오냥
- 안드로이드개발
- 2d게임
- java
- 서브모듈 sourcetree
- 유니티
- Kotlin
- 게임개발
- github submodule
- 쿼터뷰
- GIT
- 목서버
- 서브모듈 pull
- submodule sourcetree
- gitlab submodule
- Android Studio
- 안드로이이드 submodule
- 앱개발
- Android
- 안드로이드
- 타이쿤
- Today
- Total
목록내 맘대로 정리한 안드로이드 (10)
Uing? Uing!!
처음 안드로이드를 접하면, 화면에서 원하는 뷰에 접근하기 위해 findViewById 메소드를 사용하게 된다. 아, 요즘은 기초를 배울 때 코틀린 extensions를 사용하는 방식이 더 보편적일지도 모르겠다. 코틀린 익스텐션의 방식 역시 각 뷰에 캐싱을 걸어서 반복작업을 조금 줄여줄 뿐, 내부적으로는 이 findViewById 메소드를 사용하고 있다. 코틀린 extensions에 대해서도 이야기할 부분이 많지만, 우선은 findViewById 메소드를 들여다보고자 한다. findViewById의 동작 방식 기본적으로 findViewById 메소드는 id값을 이용해 특정 뷰를 받아와주는 메소드로, 액티비티, 프래그먼트, 뷰홀더 등에서 다양하게 사용이 되곤 했다. 이 메소드를 이용해 텍스트뷰를 가져와 데이..
MVVM 구조를 사용한다면 흔히 뷰모델에서 LiveData를 사용하여 데이터나 이벤트를 변경하고, 액티비티 등의 onCreate 부에서 이 LiveData에 Observer를 달아 데이터가 변경되었을 때 화면에 반영하곤 한다. 그렇다면 이렇게 설계했을 때에는 항상, Q. LiveData로 들어가는 모든 값들이 observe될 수 있을까? 결론만 말하자면, NO이다. 두 가지 이유가 있는데 하나는 1) observer의 상태, 다른 하나는 2) postValue의 동작 방식과 관련이 있다. 1) Observer가 Active하지 않은 경우 기본적으로 LiveData는 액티비티, 프래그먼트 등의 수명주기와 긴밀하게 연결되어 작동한다. 특히 안드로이드 Developers의 LiveData 개요를 보면 이런 설..
dp, sp, px 안드로이드에서 폰트 크기를 설정할 때 나는 일반적으로 sp를 사용한다. 다만 실제 디자인에서는 상황에 따라 sp가 아닌 dp, 심지어 px를 사용하는 경우도 있다. 안드로이드 개발자 문서에서는 dp와 sp, px에 대해 이렇게 설명한다. dp (밀도 독립형 픽셀) - 화면의 물리적인 밀도에 기반한 추상적인 단위입니다. 이 단위는 160dpi(인치당 도트 수) 화면에 상대적이며 화면에서 1dp는 대략 1px와 같습니다. 더 높은 밀도의 화면에서 실행한다면 1dp를 그리는 데 사용되는 픽셀의 수는 화면의 dpi에 적절한 배율로 확장됩니다. 마찬가지로 더 낮은 밀도 화면에서 실행한다면 1dp에 사용되는 픽셀 수는 축소됩니다. dp 대 픽셀의 비율은 화면 밀도에 따라 달라지지만, 반드시 정비..
ANR이란? 안드로이드 앱을 실행하다 보면 '어플리케이션이 응답하지 않는다'는 팝업 경고 메시지를 마주할 때가 왕왕 있다. 이런 경우의 오류를 ANR(Application Not Responding)이라고 부른다. ANR은 왜 발생하는가? ANR에 대한 안드로이드 공식 문서에 따르면, ANR은 다음과 같은 두 상황에 발생한다. 활동이 포그라운드에 있는 동안 앱이 입력 이벤트 또는 BroadcastReceiver(예: 키 누름 또는 화면 터치 이벤트)에 5초 이내에 응답하지 않았습니다. 포그라운드에 활동이 없을 때 BroadcastReceiver가 상당한 시간 내에 실행을 완료하지 못했습니다. 즉, 앱이 일정 시간 내에 이벤트에 응답하지 못해서 발생한다는 것. BroadcastReceiver가 이벤트에 응..
스플래시(Splash) 화면과 그 목적 스플래시 화면은 앱의 본격적인 화면이 나오기 전에 1~2초 간 잠시 나타나는 화면이다. 일반적으로 단색 배경에 어플리케이션의 로고가 중앙에 표시되는 경우가 많다. 이 화면은 왜 필요한 걸까? 일단 디자인적인 이유가 있을 수 있다. 브랜드나 앱 이미지를 각인시키기 위해서. 하지만 Splash 화면의 주 목적은 따로 있다. 스플래시 화면이 없는 어플리케이션을 열어 보면, 메인 화면이 표시되기 전에 0.x초동안 텅 빈 화면이 나타난다. 짧은 시간이지만 이렇게 텅 빈 화면이 나타나는 것은 분명히 보기 좋은 현상은 아니다. Splash 화면은 이러한 공백을 채우기 위해 제작된다. Q. 왜 빈 화면이 뜨는 것일까? 공백을 지우기 위해 Splash를 만들기 전에, 이 공백은 왜..
생명주기(Lifecycle)를 알아야 하는 이유 액티비티 생명주기란 액티비티가 생성되고, 정지되고, 재생되고, 종료되는 등의 상태 변화와 그에 따른 콜백 메서드를 총칭한다. 안드로이드 개발자라면 액티비티의 생명주기를 꼭 알아야 한다는데, 왜 그럴까? 안드로이드를 처음 공부하면, Activity를 생성하고 layout과 연결하는 작업부터 시작하기 마련이다. 화면 단위에 해당하는 Activity들은 생성되고, 파괴되고, 다른 Activity에 가려지기도 한다. 간단한 화면 하나를 구현하는 작업이라면 이러한 Activity의 생명주기에 대해서 자세히 알지 못해도 별다른 문제가 없다. 하지만 백그라운드에서 어떤 다운로드 작업이 진행되고 있다고 생각해 보자. 다운로드 도중에 Activity가 갑자기 종료된다면? ..
Main Thread (UI Thread)와 Worker Thread 안드로이드에는 Main Thread (UI Thraed)와 Worker Thread라는 개념이 따로 존재한다. 이름만 다른 것이 아니라, 두 종류의 Thread는 아예 다른 목적으로 사용된다. Main Thread는 어플리케이션을 실행하면 기본적으로 작업이 실행되는 스레드이고, Worker Thread는 특정한 목적을 위해 따로 생성해서 동작하는 스레드이다. Main Thread와 Worker Thread를 사용하는 규칙은 단순하게 아래 두 가지이다. 1. Main Thread에서는 긴 시간이 걸리는 작업을 지양해야 한다. 2. Worker Thread에서는 UI 작업을 하지 않아야 한다. 이렇게만 적혀 있으면 당연히 궁금해진다. 왜...
접근 제한자 Java와 Kotlin은 지극히도 객체 지향적인 언어다. 모든 기능들이 Class, 객체의 형태로 연결되어 작동한다. 이런 객체지향적인 구조에서는 Class간에 어떤 정보를 공개할 것이고 또 어떤 정보를 숨길 것인지가 중요하다. 어떤 경우에는 클래스의 외부 사용자가 직접 건드려서 사용해야 하는 함수나 변수 등등이 있을 수 있고, 또 반대의 경우에는 외부에서 직접 건드려서는 안 되는 내용이 클래스 내에 포함될 수도 있다. 각 요소마다 이에 대한 설정을 관리해주는 것이 '접근 제한자'이다. Java에서의 접근 제한자 (Access Modifiers) Java에서 사용되는 접근 지정자에는 4가지 종류가 있다. 아래는 다른 블로그 (이를테면 https://luyin.tistory.com/232) 에..