본문 바로가기

Android

(66)
[Android] Fragment 잘 사용하기 개요 Android의 Fragment는 유용한 만큼 매우 복잡한 컴포넌트이다. 단순히 Fragment를 사용하는 것은 디버그하기 어려운 많은 문제를 마주칠 수 있다. 이런 문제를 피하기 위한 다양한 솔루션을 알아보자. 1. 새로운 Fragment를 onCreate에서 savedStateInstance의 체크 없이 생성하는 것 흔히 다음과 같은 코드를 자주 확인할 수 있다. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) supportFragmentManager.beginTransaction() .replace(R.id.conta..
[Flutter] Android/iOS Native Platform 코드 사용하기 개요 회사에서 Android/iOS Native로 개발된 SDK를 Flutter에서 사용하기 위해 알게 된 내용을 정리한 글이다. Flutter의 구조 Flutter App(client)와 각 platform host로의 통신은 다음과 같은 흐름을 가진다. 이 때, 메시지와 응답은 비동기적으로 처리된다. 유의해야할 점은 Flutter가 Dart를 통해 channel method를 비동기로 실행했더라도, 해당하는 실제 platform method는 메인 스레드에서 호출해야 한다. [참고] MethodChannel은 각 platform에 맞는 method 호출이 가능하게 한다. 이 클래스를 통해 약간의 보일러 플레이트를 통해 Plugin을 개발할 수 있다. 이 때, 각 platform에 맞게 변화하는 cod..
[Android] Jetifier란? 개요 Support library 이슈를 해결하기 위해 알게 된 Jetifier에 대해서 알아본다. Jetifier The standalone Jetifier tool migrates support-library-dependent libraries to rely on the equivalent AndroidX packages instead. The tool lets you migrate an individual library directly, instead of using the Android gradle plugin bundled with Android Studio. Support Library에 종속적인 라이브러리를 비슷한 AndroidX로 마이그레이션할 때 사용한다. 즉, 과거 안드로이드에서 자주 ..
[Android] Jetpack Compose로 개발하기 개요 이번 포스팅은 을 참고하여 아래 이미지와 같은 메시징 UI를 가진 앱을 Compose를 활용하여 개발하는 예시이다. Composable Functions Jetpack Compose는 Composable Functions으로 이루어진다. 이러한 함수를 사용하면 UI 구성 과정(기존의 xml 방식)에 초점을 맞추는 대신 앱의 UI를 설명하고 데이터의 종속성을 제공하는 프로그래밍 방식으로 앱의 UI를 정의할 수 있다. Add a Text Element 첫번째로 "Hello World"라는 텍스트를 text 요소를 onCreate 내부에 사용하여 표시할 것이다. 그리고 그 과정에서 setContent 블럭을 활용하게 되는데 Composable Functions을 호출하는 액티비티의 레이아웃을 정의한다. ..
[Android] Jetpack Compose 개요 Jetpack Compose Google에서 발표한 Jetpack 중 Compose는 안드로이드 UI를 XML이 아닌 선언형으로 개발할 수 있는 라이브러리이다. 더 적은 코드와 직관적인 사용법으로 UI 개발이 쉬워진다. Compose를 통해 해결할 수 있는 것 관심사의 분리는 유명한 소프트웨어 디자인 원칙이다. 이를 이해하기 위해선 "결합도(Coupling)"와 "응집도(Cohesion)"을 이해해야 한다. 결합도는 서로 다른 모듈의 유닛 간의 종속성을 의미한다. 응집도는 모듈 내의 유닛 간의 그룹화의 정도를 나타낸다. 유지보수가 쉬운 소프트웨어를 개발하기 위해선 결합도를 낮추고, 응집도를 높혀야 한다. 현대 안드로이드 개발 패턴은 ViewModel을 사용하고 Layout(XML)에서 ViewModel의..
뷰모델(ViewModel)에서 데이터를 로딩하는 다양한 방법 해당 포스팅은 When to load data in ViewModels을 번역한 포스팅입니다. 개요 안드로이드에서 AAC의 ViewModel과 LiveData는 핵심적인 컴포넌트이다. 이를 통해 라이프 사이클을 인지하여 보다 더 안전하고 효율적인 코드를 작성할 수 있게 된다. 이 과정에서 ViewModel 내부에 선언된 LiveData를 Activity가 사용한다. 이 때, ViewModel은 데이터를 로딩하여 LiveData에 세팅하는 적절한 시점이 필요하다. 언제, 어떻게 이를 효율적으로 관리할 수 있을까? Use Case 해당 포스팅에서 사용할 Use Case는 다음과 같다. 책 리스트를 ViewModel에서 사용하고 LiveData를 이용하여 발행한다. class Books(val names: L..
[안드로이드] 태스크(Task)와 백 스택(Back Stack)의 개념과 Launch Mode, Intent Flag 태스크(Task) 태스크는 액티비티 스택에 대한 메타 데이터와 여러 정보의 콜렉션이다. 앱의 런처 아이콘을 클릭하면 안드로이드 시스템에서 실제로 수행하는 일은 재개(resume)할 이전의 기존 작업을 찾는 것이다. 만약 어느 태스크도 찾지 못했다면 새로 시작된 액티비티를 태스크의 백스택의 루트 액티비티로 설정하여 새로운 태스크가 생성된다. 백 스택(Back Stack) 먼저 안드로이드에서 Stack은 액티비티가 순서대로 저장되어 관리되는 공간을 의미한다. 뒤로가기를 누를 경우 최상단의 액티비티를 제거(pop)한다. 혹은 startActivity()를 통해 새로운 활동을 최상단에 추가하여 새 액티비티가 기존의 최상단 액티비티를 가릴 경우 기존 액티비티는 일시 중지된다. 태스크: 다른 앱의 액티비티와의 관계..
[안드로이드] PendingIntent란? PendingIntent PendingIntent는 Intent를 갖고 있는 클래스이다. 기본적으로 다른 애플리케이션(프로세스)에서 PendingIntent를 생성한 앱을 대신하여 액티비티를 실행하는 등 기술한 작업을 수행할 수 있도록 하는게 가능하다. 즉, 다른 앱에 PendingIntent 를 제공하면 다른 앱이 동일한 권한을 소유하는 것 처럼 지정한 작업을 수행할 수 있게 된다. 실제 사용 예시 설명만으로는 이해하기 어려울 수 있으므로 자세한 예시를 들면 다음과 같다. Notification을 생성할 때 PendingIntent를 전달해주어 Notification을 통해 Intent를 실행하도록 하는 것이 가능하다. AlarmManager를 통해 특정 시점에 어떤 작업을 수행해야 할 때 Pendin..