1. 서비스에 대해서 설명해주세요 > 서비스는 보통 백그라운드에서 오랜시간 동안 수행될 때 적합한 어플리케이션 컴포넌트 이다. 그리고 유저 인터페이스를 제공하지 않는다. 심지어 유저가 해당 어플리케이션과 상호작용하고 있지 않을 때도 말이다. 서비스는 3가지 타입이 있다. Foreground Service : 포그라운드 서비스는 유저에게 알림을 줄 수 있는 명령을 수행한다 예를 들어 우리는 음악을 실행하기 위해서 포그라운드 서비스를 사용할 수 있고 사용자에게 알림을 표시해주어야 한다. Background Service : 백그라운드 서비스는 유저에게 직접적으로 알림을 주지 않는 서비스를 수행한다. 안드로이드 API 26 레벨 이상에서는 백그라운드 서비스를 사용하는 것이 금지 되었다. 그래서 이런 작업들에는..
1. 왜 액티비티 클래스 의 onCreate() 메소드 안에서 setContentView() 를 사용해야 할까요? > 액티비티의 onCretate() 메소드는 액티비티 불릴 때 한번만 호출이 되기 때문에, 초기화에 자주 사용된다. onResume() 또는 onStart() 같이 여러번 호출 될 수 있는 곳에서 호출하는 것은 매우 비효율적인 코드이다. 2. 액티비티 클래스의 onSavedInstanceState(), onRestoreInstanceState() 메소드의 역할은 무엇인가? > onSaveInstanceState() - 액티비티가 pause 되기 전에 데이터를 저장하는데 사용합니다. onRestoreInstanceState() - 액티비티가 파괴되고, 다시 재생성될 때, 액티비티가 가지고 있는..
구글링과 주관적인 생각이 들어있어 틀린 답들이 있습니다 정중히 댓글, 수정 부탁드립니다 약 10개식 정리할 예정입니다. 1. 안드로이드 애플리케이션 클래스는 무엇인가요? > 안드로이드의 Application Class 는 액티비티 및 서비스와 같은 다른 모든 구성 요소(액티비티(Activity), 서비스(Service), 방송수신자(Broadcast receiver), 콘텐츠 제공자(Content provider), 인텐트(Intent))에 접근 가능한 기본 클래스입니다. 또한 애플리케이션 프로세스가 생성될 때, 가장 먼저 초기화 됩니다. 그렇기 때문에, 보통 앱 전역에서 일관성있게, 사용하는 요소들을 등록하여 사용하곤 합니다. 2. 컨텍스트란 무엇인가요? Context > Context 는 리소스에 접..
모든 예제 코드는 구글 청사진을 기본으로 구현되었습니다. 모든 프로젝트가 저장되어 있는 저장소입니다 (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 ..
몇일전에 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 을 주입 시켜줘야 하는데 액티비티가 아니기..
Recycler view 동작 원리 Recycler view 의 아답터에 데이터가 300개 있고 화면에 10개의 데이터가 보여진다면, 10개의 데이터 공간을 생성하고, 그 10개의 공간을 재활용해서 300개의 데이터를 보여준다 호출 순서 getItemCount 함수를 이용하여 Item 의 총 갯수가 몇개 인지 판단하고, getItemViewType 이 불리면서, 현재 뷰의 Position에 해당하는 ViewType을 판단한다. 이후 onCreateViewHolder에서, ViewType 에 해당하는 ViewHolder를 생성한다. onBindViewHolder 에서는 onCreateViewHolder 에서 생성된 ViewHolder 를 가져와서 현재 포지션에 맞는 데이터를 뷰홀더안에 뷰들에게 바인딩해준다..
중첩 프래그먼트의 특징은 XML로 추가할 수가 없고, 항상 동적으로 추가해야한다. 그렇기 때문에 부모 프래그먼트는 자식 프레그먼트를 관리하고 자식프래그먼트가 UI를 담당하는 구조로 자주 설계된다. 액티비티에서 프래그먼트를 다룰 때는 getSupportFragmentManager()를 사용하였지만 중첩 프래그먼트를 다룰 때는, getChildFragmentManager()를 사용한다. public class TestFragment extends Fragment { @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInsta..
보통 캔버스에 그리는 것이 아닌 뷰그룹을 상속받아 내부에 뷰를 사용할때는 생성자에서 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);} ..