Android

Android/Interview Question

안드로이드 면접 질문 1

구글링과 주관적인 생각이 들어있어 틀린 답들이 있습니다 정중히 댓글, 수정 부탁드립니다 약 10개식 정리할 예정입니다. 1. 안드로이드 애플리케이션 클래스는 무엇인가요? > 안드로이드의 Application Class 는 액티비티 및 서비스와 같은 다른 모든 구성 요소(액티비티(Activity), 서비스(Service), 방송수신자(Broadcast receiver), 콘텐츠 제공자(Content provider), 인텐트(Intent))에 접근 가능한 기본 클래스입니다. 또한 애플리케이션 프로세스가 생성될 때, 가장 먼저 초기화 됩니다. 그렇기 때문에, 보통 앱 전역에서 일관성있게, 사용하는 요소들을 등록하여 사용하곤 합니다. 2. 컨텍스트란 무엇인가요? Context > Context 는 리소스에 접..

Android/미분류

안드로이드 Architecture 패턴 예제 코드(MVC, MVP, MVVM, LIVEDATA, KOIN, RXJAVA, DataBinding)

모든 예제 코드는 구글 청사진을 기본으로 구현되었습니다. 모든 프로젝트가 저장되어 있는 저장소입니다 (MVC, MVP, MVVM) Nanamare/android_architecture Simple Android architecture app. Contribute to Nanamare/android_architecture development by creating an account on GitHub. github.com 모든 예제 코드에서 API 비동기 처리 및 Observer 패턴 구현에 RxJava가 사용되었습니다. MVC 적용(RxJava 사용) MVP 적용(RxJava 사용) MVVM 적용(ObservableField + Databinding + RxJava 사용) MVVM 적용(LiveData ..

Android/Development Tips

Custom view 에서 Koin 사용해 ViewModel 주입할 때 주의 할점

몇일전에 CustomView에서 viewModel 을 주입하며 삽질한 경험입니다. 보통 커스텀 뷰를 만들면 이런 모습이 많이 나오게 됩니다. class CustomView : BaseCustomView { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) } 근데 만들고 나면 CustomViewModel 을 주입 시켜줘야 하는데 액티비티가 아니기..

Android/Development Tips

YUV420_8888 to NV21

Planar format 의 YUV 420 포맷을 Single byte array 로 변환

Android/Today I Learned

Recycler view 동작 원리

Recycler view 동작 원리 Recycler view 의 아답터에 데이터가 300개 있고 화면에 10개의 데이터가 보여진다면, 10개의 데이터 공간을 생성하고, 그 10개의 공간을 재활용해서 300개의 데이터를 보여준다 호출 순서 getItemCount 함수를 이용하여 Item 의 총 갯수가 몇개 인지 판단하고, getItemViewType 이 불리면서, 현재 뷰의 Position에 해당하는 ViewType을 판단한다. 이후 onCreateViewHolder에서, ViewType 에 해당하는 ViewHolder를 생성한다. onBindViewHolder 에서는 onCreateViewHolder 에서 생성된 ViewHolder 를 가져와서 현재 포지션에 맞는 데이터를 뷰홀더안에 뷰들에게 바인딩해준다..

Android/Development Tips

중첩 프래그먼트와 제어 및 헤드리스 프래그먼트

중첩 프래그먼트의 특징은 XML로 추가할 수가 없고, 항상 동적으로 추가해야한다. 그렇기 때문에 부모 프래그먼트는 자식 프레그먼트를 관리하고 자식프래그먼트가 UI를 담당하는 구조로 자주 설계된다. 액티비티에서 프래그먼트를 다룰 때는 getSupportFragmentManager()를 사용하였지만 중첩 프래그먼트를 다룰 때는, getChildFragmentManager()를 사용한다. public class TestFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInsta..

Android/Development Tips

커스텀 뷰의 초기화 시점

보통 캔버스에 그리는 것이 아닌 뷰그룹을 상속받아 내부에 뷰를 사용할때는 생성자에서 xml을 인플레이트 시키고, 이후 인플레이트 된 뷰들을 찾아 사용할때, 시점을 onCreate()에서 초기화 하여 사용했었는데, 더 정확한 시점이 있었다. public CircleProgressView(Context context) { super(context); initView(); //inflate } @Overrideprotected void onFinishInflate() { super.onFinishInflate(); mIvStar = findViewById(R.id.star); mIvRect = findViewById(R.id.rect); mIvCircle = findViewById(R.id.circle);} ..

Android/Development Tips

커스텀뷰와 merge 태그

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

Android/Development Tips

안드로이드 패딩과 마진

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

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