분류 전체보기(80)
-
MenuProvider
setHasOptionsMenu() , onCreateOptionsMenu(), onOptionsItemSelected() 는 Deprecated 되었다……………. 그렇다면 대체제는 무엇일까? MenuProvider4개의 메소드를 포함한 인터페이스이다 onCreateMenu : menu를 inflate하는 부분onMenuItemSelected : option메뉴를 클릭할 때 발생하는 부분onPrepareMenu : menu item을 customizing하는 부분. visibility나 menuItem의 customize를 할 수 있다onMenuClosed : 메뉴 닫히면 발생하는 부분 MenuHostComponentActivity, AppCompatActivity에 implement된 인터페이스. me..
2023.12.15 -
메모리 누수의 원인 10가지
1. Non-Static Inner ClassesKotlin의 내부 클래스는 외부 클래스에 대한 암시적 참조를 보유할 수 있음Example:class MyActivity : AppCompatActivity() { private inner class MyThread : Thread() { override fun run() { // Task } } }해결 방법: 내부 클래스를 정적으로 만들거나, 별도의 클래스를 사용하기. 필요한 경우 외부 클래스에 대한 약한 참조를 전달 2. Handlers and Runnables핸들러가 외부 클래스에 대한 참조를 보유하는 경우 메모리 누수가 발생할 수 있음Example:class MyActivity : AppCompatActivity() { private val hand..
2023.12.15 -
Coroutine Flow BackPressure & Buffer
BackPressure 업스트림 생산자가 다운스트림 소비자에게 스트림을 emit하는데, 소비자가 emit속도를 맞춰 방출할 수 없을 때 발생 ( 처리속도 고려 없이 emit )메모리 사용 및 성능 문제가 발생해결하기 위한건? → buffer Buffer아래와 같이 적용하면 됩니다lifecycleScope.launch { flowOf("A","B","C","D","E") .onEach { println("Wizard emits: $it") } .buffer() .collect { println("Lady collects: $it") delay(2000) } } 요것이Wizard emits A Lady collects A Wizard emits B Lady collects B Wizard emits C La..
2023.11.30 -
Android 에서 TDD를 습관화하기
TDD?Test Driven Developmentsw의 개발 전에, 테스트 사례로 제시되는 요구사항에 의존하는 개발 프로세스가장 쉽고 빠르고, 신뢰 가능한 방법은 Red, Green, Refactor로 구성하는 방법! 테스트 라이브러리Truth — value를 asserting하기 위한 라이브러리Turbine — Flow에서 받은 value를 asserting하기 위한 라이브러리 Mockito — mock데이터를 위한 라이브러리JUnit4 — java 기본 유닛 테스트 프레임워크JUnit5 — Java 단위 테스트 프레임워크 → 알아서 추가하시오 예제@AndroidEntryPoint class ContactsFragment : Fragment() { // Let's pretend this is a cla..
2023.11.30 -
When 조건문을 다양하게 사용하기
kotlin을 사용하는 개발자들이라면..주로 조건 필터링을 when을 사용할것이다. 왜냐면 보기 편함 when문이라는것은 …기본 구문when(x) { value -> {} value2 -> {} value3 -> {} }이런 식으로 사용을 하는 친구인데 단일 케이스 다중 값when(x) { 1,2,3 -> {} else -> {} }이런식으로, 공통된 결과를 만드는 케이스들을 모아서 사용할 수도 있다.여기까지는 다들 사용하고 있을거고…나도 익숙하다.아래부터는 조금 다양한 변형을 살펴보자 조건 분기when [ x.isOdd() -> {} x.isEven() -> {} else -> {} }이런 식으로..표현식을 포함한 조건들도 비교가 가능하다. 스마트 캐스트when(x) { is String -> {} i..
2023.11.30 -
Useful modifier
알아두면 유용한 두 개의 수정자를 소개합니다~~ Offset modifier의 offset 을 통해 x 및 y 위치를 변경할 수 있음 @Composable funOffsetModifier( modifier:Modifier = Modifier ) { Box( modifier = modifier .padding(50. dp) .ground(Color.LightGray) .fillMaxWidth() .height(100. dp), contentAlignment = Alignment.TopCenter ) { Text( text = stringResource(R.string.offset_content), modifier = Modifier.offset(x =0. dp, y = -(15. dp)), style = ..
2023.11.30