Android

Android/Development Tips

커스텀뷰와 merge 태그

커스텀 뷰를 만들때 상속받아 뷰와 커스텀 뷰를 포함하는 뷰 그룹과 불필요한 중첩을 피하기 위해 merge 태그를 사용한다. 가령 예를 들어 이런 식으로 사용하면 된다. merge 대신 LinearLayout을 사용할 수 있지만, 저 xml을 사용하는 커스텀 뷰가 LinearLayout을 상속받아 만든 것이라면 LinearLayout 안에 또 LinearLayout이 존재하는데 이 경우 중복 되기 때문에 merge를 사용하면 중첩을 피할수 있다.

Android/Development Tips

안드로이드 패딩과 마진

가끔 패딩과 마진을 헷갈하는 경우를 보아 간단히 정리. 패딩은 뷰 크기에 포함이 되지만, 마진은 포함 되지 않는다. 따라서 패딩으로 지정한 간격은 그 뷰의 배경색으로 칠해지고, 마진으로 지정된 간격은 공백으로 표현된다.

Android/Development Tips

액티비티의 백스택, taskAffinity

안드로이드 백스택은 몇번 봤는데도, 기억에 잘 남지 않아 가볍게 정리 해둡니다. 새로운 액티비티가 시작되면, 실행 중이던 액티비티는 백스택에 들어가게 된다. 그리고 시작된 액티비티는 태스크라는 그룹에 속한다. 내가 보는 책에서는 백스택에 대해서 3가지로 정리하고 있다. 같은 앱에서 시작된 액티비티는 같은 백스택에 쌓인다. TaskAffinity의 속성에 따라 소속되는 태스크가 달라진다. LaunchMode에 따라 액티비티 생성의 여부, 새로운 태스크에 속하는 등 액티비티의 시작이 달리진다. 백스택에 쌓인 액티비티는 뒤로가기 키 등으로 액티비티를 종료하면 스택 자료구조의 특징과 같게 위에서부터 차례로 꺼내어 제거된다. 또한 TaskAffinity는 태스크의 이름으로 이해하는 것이 더 이해하기 쉽다. Tas..

Android/Development Tips

안드로이드 디바이스 설정(언어설정, SIM 교체, 화면 돌림) 데이터 보존

안드로이드 설정 값의 변경이 발생하면, 기본적으로 시스템에서는 현재 액티비티를 폐기하고 새로 생성한다. 예를 들어 화면을 세로에서 가로로 변경하거나, 언어 설정, SIM 교체 등이 있다. 사용자가 앱 가입을 하기위해 정보를 AppcompatEditText등에 입력을 하였는데, 화면 모드 변경으로 인해 현재 액티비티를 폐기하고 새로 생성하면, 기존의 입력된 데이터가 모두 없어져서 사용자에게 불편함을 줄 수 있다. 따라서 이런 디바이스 설정 변경이 있을때는, Bundle 객체에 저장하였다가, onRestoreInstanceState을 오버라이드 하여, 값을 찾아 원래의 뷰에 담아주면 된다. public class TestActivity extends AppCompatActivity { public stati..

Android/Development Tips

[Android] Sparse Array 와 HashMap 비교하기

accept 보통 작업을 하다 보면, Map를 사용하게 되면, SparseArray 더욱 좋은 Performance를 가지고 있으니 바꾸라는 Lint가 뜬다. SparseArray는 Primitive type의 키를 가질때, HashMap 으로 대체될 수 있다. SparseArray 가 가지는 장점으로는 HashMap 과는 달리 내부에서 객체를 생성하지 않아, 더 높은 퍼포먼스를 가진다고한다. 그렇게 때문에 Wrapper 클래스로 boxing 할 필요가 없어 또한 이점을 가진다. SparseArray의 주 목적은 객체 대신 객체를 키로 사용하여 메모리를 절약한다는 것이다. 단점으로는 안드로이드에서만 동작하기 때문에 안드로이드에 높은 의존성을 가진다. HashMap은 아래와 같이 변환되어 사용될 수 있다...

Android/Development Tips

[Android] Foreground 활용하기, 터치 이벤트 쉽게 적용하기

보통 안드로이드 개발을 하다보면, 사용자가 터치해야 하는 영역을 커스텀하여 개발하는 일이 잦다. 보통 Selecter 같은 것을 활용하여, background(후경)에 적용하여 해결하지만, 가끔 하위 뷰에 터치 이벤트가 가려지는 경우가 있다. 그래서 appcompat-v7 라이브러리 에서 터치 이벤트를 쉽게 적용할 수 있도록 ?attr/selectableItemBackground, ?attr/selectableItemBackgroundBorderless 등 제공하는 속성을 이용하여 Foreground(전경)에 넣어주게 되면 터치 이벤트가 뷰의 가장 앞에 위치하게 되어 해결할 수있다. 참고로 Foreground 속성은 FrameLayout에서 제공하며, 이를 상속 받는 모든 것들에 적용할 수 있습니다.

Android/Development Tips

[펌] Activity 스택 intent flag

FLAG_ACTIVITY_BROUGHT_TO_FRONT시스템에서 설정하는 값이며, 같은 task에 Activity가 존재할 경우에 Activity의 실행모드가 singleTask이면 자동으로 설정됨 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET테스크가 리셋될 때 플래그가 사용된 액티비티부터 위의 액티비티가 모두 삭제됩니다.예) ABCD -> B call - > AB FLAG_ACTIVITY_RESET_TASK_IF_NEEDED플래그의 설정에 의해 리셋이 이루어지게 됩니다.시스템에 의해 홈에서 사용자에 의해 백그라운드에 있던 태스크가 포그라운드로 전환될때에 항상 붙게 됨니다. FLAG_ACTIVITY_RESET_TASK_IF_NEEDED인텐트를 이용하여 새로운 테스크를 생성하거나 존재하고..

Android/미분류

텐서플로우, 텐서 플로우 라이트, NCNN 비교해보기.

문서) https://docs.google.com/presentation/d/1IsY-A7oAAbMqX_si5tccmtJEbp0hjHNCQhIj0gf2XtY/edit?usp=sharing Ncnn Mobilenet_V1 (https://github.com/nanamare/ncnn_mobilenet) 텐서 플로우는 구글의 머신러닝 프레임 워크이며, 텐서 플로우 라이트는 임베디드, 모바일 같은 플랫폼에서 사용하기 위해 최적화 되어 있는 구글에서 제공하는 라이브러리 입니다. NCNN 은 모바일 플랫폼에 최적화 된 고성능 신경망 추론 컴퓨팅 프레임 워크입니다. 특이하게도 "NCNN은 휴대 전화 CPU의 모든 알려진 오픈 소스 프레임 워크보다 빠르게 실행됩니다"라고 써져 있어 궁금하기도 하고 NCNN에 관심이 있..

Nanamare
'Android' 카테고리의 글 목록 (9 Page)