일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- DI
- 웹뷰
- 안드로이드 스튜디오
- Retrofit
- 다트
- 코틀린
- error
- 안스
- 안드로이드스튜디오
- Android
- GIT
- viewpager
- 의존성주입
- 안드로이드
- Gradle
- studio
- WebView
- 에러
- build
- 레트로핏
- ADB
- coroutine
- image
- 깃헙
- MVVM
- 스튜디오
- Kotlin
- Github
- dart
- RecyclerView
- Today
- Total
목록전체 글 (151)
코딩하는 일용직 노동자
안드로이드 코루틴에서 launchWhenStarted, launchWhenCreated, launchWhenResumed는 액티비티 또는 프래그먼트의 라이프 사이클에 따라 코루틴을 실행하는 함수입니다. 각 함수의 작동 방식: launchWhenStarted: 액티비티 또는 프래그먼트가 시작되면 코루틴을 실행합니다. 액티비티 또는 프래그먼트가 일시 중지되거나 중지된 후 다시 시작되면 코루틴은 다시 시작되지 않습니다. launchWhenCreated: 액티비티 또는 프래그먼트가 생성되면 코루틴을 실행합니다. 액티비티 또는 프래그먼트가 일시 중지되거나 중지된 후 다시 시작되면 코루틴은 다시 시작되지 않습니다. launchWhenResumed: 액티비티 또는 프래그먼트가 다시 시작될 때 코루틴을 실행합니다. 액..
StateFlow 와 SharedFlow 의 차이점에 대해 알아보겠습니다. StateFlow는 상태(State)를 표현하기 때문에 초기값이 필요하고 하나의 값만 업데이트할 수 있습니다. StateFlow는 .value에 상태값을 넣어서 업데이트를 합니다. SharedFlow는 초기값이 없습니다. SharedFlow는 emit() 으로 이벤트를 전달합니다. StateFlow 와 SharedFlow를 테스트해보기 위해 MainViewModel을 만들고 아래처럼 테스트코드를 구성했습니다. import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.delay import kotlinx.c..
callbackFlow는 콜백 함수를 사용하여 데이터 스트림을 생성하는 코루틴 플로우 함수입니다. 비동기 작업을 수행하고 데이터를 스트림 방식으로 제공하는 경우에 유용합니다. 작동 방식: callbackFlow 함수는 콜백 함수를 인수로 받습니다. 콜백 함수는 데이터가 사용 가능할 때마다 offer 함수를 호출하여 데이터를 제공합니다. callbackFlow 함수는 데이터 스트림을 생성하고 반환합니다. 구독자는 collect 함수를 사용하여 데이터 스트림을 수집합니다. 장점: 비동기 작업을 쉽게 코루틴 플로우와 함께 사용할 수 있습니다. 데이터 스트림을 백프레셔 방식으로 제공하여 메모리 누수를 방지할 수 있습니다. 콜백 함수를 통해 데이터 스트림을 유연하게 제어할 수 있습니다. 단점: callbackFl..
1. 데이터 스트림 방식: MutableStateFlow: 단일 구독자를 위한 유니캐스트 데이터 스트림입니다. 최신 값만 유지하며, 새 값이 방출되면 이전 값은 덮어쓰됩니다. MutableSharedFlow: 여러 구독자를 위한 멀티캐스트 데이터 스트림입니다. 모든 구독자는 최신 값을 받으며, 버퍼링을 통해 이전 값도 받을 수 있습니다. Channel: 여러 구독자를 위한 멀티캐스트 데이터 스트림입니다. 버퍼링을 통해 데이터를 저장하며, 여러 구독자가 동시에 데이터를 읽고 쓸 수 있습니다. 2. 구독 방식: MutableStateFlow: collect 함수를 사용하여 구독합니다. MutableSharedFlow: collect 또는 subscription 함수를 사용하여 구독합니다. Channel: r..
Coroutine Operator(코루틴 연산자)는 데이터 스트림을 처리하고 변환하는 데 사용되는 함수입니다. 크게 두 가지 종류로 나눌 수 있습니다. 1. 중간 연산자: 데이터 스트림을 변환하거나 필터링하는 데 사용됩니다. 여러 개의 연산자를 체인 방식으로 연결하여 사용할 수 있습니다. 대표적인 연산자로는 map, filter, take, zip 등이 있습니다. map: 각 데이터를 변환하여 새로운 데이터 스트림을 생성합니다. filter: 특정 조건에 맞는 데이터만 선택하여 새로운 데이터 스트림을 생성합니다. take: 지정된 개수의 데이터만 가져옵니다. zip: 두 개의 데이터 스트림을 결합하여 새로운 데이터 스트림을 생성합니다. buffer: 데이터 스트림을 버퍼링하여 처리 속도를 향상시킵니다. ..
액티비티나 프래그먼트 내에서 ViewModel을 사용하려면 ViewModelProvider를 이용해 ViewModel을 생성해 사용할 수 있습니다. ViewModel을 생성할때는 파라메터가 있을때와 없을때의 생성방법이 차이가 있습니다. 파라메터가 없는 ViewModel은 아래처럼 생성이 가능합니다. val viewModel: MainActivityViewModel by lazy { ViewModelProvider(this)[MainActivityViewModel::class.java] } 하지만 MainActivityViewModel의 생성자에 파라메터가 있다면 위 방법으로 객체생성이 안됩니다. 테스트를 위해 Int형의 파라메터를 받는 MainActivityViewModel 클래스를 만들어보겠습니다. i..
기본적인 Compose로 구현하는 화면은 상단에 statusBar가 있고 아래에 navigationBar가 있는 형태입니다. modifier에 statusBarsPadding() navigationBarsPadding()를 추가해서 상단과 하단의 영역을 제외한 나머지 영역을 사용하도록 합니다. 하지만 요즘은 이 영역을 모두 사용해서 더 이쁘게 앱을 만드는 추세입니다. Jetpack Compose에서 전체화면을 사용해 컨텐츠를 표시하는 방법을 알아보겠습니다. 코드를 통해 확인해봅시다. @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @Composable fun MyScreen() { Scaffold { Column( modifier = Modifier ..
Activity 가 아닌 Class나 ViewModel class 에 Activity의 라이프사이클을 연결해서 onCreate(), onResume(), onPause(), onStop() 등의 상태변화를 감지하고 처리하는 방법을 알아보겠습니다. 이번 예제에서는 ViewModel 에 연결해보겠습니다. 1. app레벨의 gradle에 아래의 라이브러리들을 추가해줍니다. implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.7.0' implementation 'androidx.activity:activity-compose:1.8.2' implementation 'androi..
app 레벨의 build.gradle 파일에 아래 내용을 추가해주면 됩니다. def getDate() { return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) } def buildDate = '\"' + getDate() + '\"' def appName = "APP_NAME" android { ... defaultConfig { ... setProperty("archivesBaseName","${appName}-v${versionName}(${versionCode})-${buildDate}") } ... }
Github 에서 2년전 자료를 클론받았다. gradle 파일에서 dependencies의 라이브러리 버전들을 최신으로 올려준 후 빌드해보니 아래와 같은 에러메세지가 보이면서 빌드가 되지 않았다. Can't determine type for tag '?attr/shapeAppearanceCornerSmall' 구글링을 해보니 최신 라이브러리에서 빌드시 에러가 발생하고 있어서 버전을 좀 낮춰서 해보라는 답변이 있었다. implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' 을 아래처럼 고쳤다. implementation 'androidx.appcompat:appc..