본문 바로가기
[android] What is MVI & Concept of Model - MVI (Model View Intent) Architecture What is MVI? - MVI 는 Model-View-Intent 를 의미하며, Cycle.js 에 영향을 받았다. MVI 는 android 를 비롯한 UI-based app 에 적합한 패턴이다. MVI 의 목적은 더 읽기 좋은 코드, decouple 된 코드이며, 더 일관성 있는 코드이다. - Intent 는 유저 이벤트에 의해 발생하는 view 와의 interaction 이다. Intent 는 Model 의 상태변화를 야기한다. - View 는 다른 아키텍처에서 말하는 것과 동일하다. Model 의 상태를 반영하며, intent 를 통해 유저 interaction 을 전달한다. - Model 은 'state' 를 의미하며, business logic 과의 interaction 을 포함한다. 이는 .. 2023. 11. 29.
[android] 다시 살짝 정리해보는 AppWidget. https://developer.android.com/develop/ui/views/appwidgets # AppWidgetHost 위젯을 로드하고 표시할 앱. 보통 Launcher 가 그 역할을 함. AppWidgetProviderInfo widget 의 layout, update frequency, AppWidgetProvider 등의 metadata 기술 xml 형태로 제공함 AppWidgetProvider widget 의 lifecycle 관련된 method 들을 정의. widget 이 update, enable, disable, deleted 되었을 때 event 를 broadcast 로 받을 수 있음. View layout xml 로 정의 # Android Studio 에서는 New > Wid.. 2023. 8. 18.
[android] ConnectionService 에 대해 알아보자 https://developer.android.com/reference/android/telecom/ConnectionService # 앱이 다음 조건을 충족할 때 구현해야 하는 Service 임 VoIP 이나 다른 전화를 발신하면서 system 이 관리하는 ConnectionService 에 통합되길 원하는 경우 독립적인 전화앱으로 system 이 관리하는 ConnectionService 에 통합되지 않길 원하는 경우 (self managed) # ConnectionService 를 구현하면, 다음 과정을 통해 Telecom 이 bind 하도록 등록 할 수 있다. 1. Manifest 에 정의 2. TelecomManager 에 PhoneAccount 등록 System 이 관리하는 ConnectionS.. 2023. 8. 17.
[android] Compose Side-effects https://developer.android.com/jetpack/compose/side-effects # LaunchedEffect : composable 안에서 suspend function 실행 composition 에 들어가면 LaunchedEffect 의 block 코드가 새로운 coroutine 에서 실행됨. composition 에서 벗어나면 LaunchedEffect 의 block 코드는 cancel 됨. Recomposition 에서는 LaunchedEffect 의 key 가 변경되는 경우 기존 coroutine cancel 하고 relaunch 됨. if (state.hasError) { // `LaunchedEffect` will cancel and re-launch if `scaf.. 2023. 8. 16.
[android] compose 의 stability https://developer.android.com/jetpack/compose/performance/stability # compose 는 type 을 stable, unstable 로 구분한다. type 이 immutable 이면 stable 이고, 이는 recomposition 시 compose 가 값 변경이 있었는지를 알아챌 수 있다는 것이다. type 이 unstable 하다는 것은, recomposition 시 compose 가 값 변경이 있었는지를 알 수 없다는 것이다. (돼왕 : 그래서 안정성을 위해 항상 recomposition) # stable parameter 는 recomposition 시 값이 변경되지 않았다면 recompose 를 skip 시킨다. unstable paramet.. 2023. 8. 15.
[android] BlockedNumbers (수신차단) 에 대해 알아보자. https://source.android.com/docs/core/connect/block-numbers # Android N (7.0, API Level 24) 전에는 수신차단을 위해서는 특정 앱을 다운로드 받았어야 했음. 그러나 이런 앱들도 공식적으로 지원되는 API 가 없었기에 기대하는 만큼 작동하지 않았음. 몇몇 제조사들은 자체적인 수신차단 방법을 제공하곤 했지만, 유저가 단말을 변경하면 이 정보들은 날아가기 일쑤였음. 기능들을 나름 잘 제공하는 앱들을 사용하는 경우에도, 각각의 앱에서 중복으로 수신차단 번호를 등록해야 하는 수고로움도 있었음. # Android N (7.0, API Level 24) 에서는 BlockedNumberProvider 라는 content provider 가 제공됨. 이.. 2023. 8. 14.
[android] disable fullscreen IME when activity is on landscape mode (IME_FLAG_NO_EXTRACT_UI) - 내 앱이 activity 가 landscape 모드일 때 IME 가 fullscreen 이 되는 현상이 있고, 다른 앱은 fullscreen 이 안 되는 것을 확인하였다. control 가능한 영역인 것을 알 수 있다. - EditorInfo.IME_FLAG_NO_EXTRACT_UI 란 녀석이 있었다. 설명을 보면.. landscape mode 에서 input method 는 fullscreen 이 될 수 있다. 이는 해당 UI 들을 작게 보이게도 하며, 앱을 뒤로 감추기도 한다. IME 가 event 를 모두 먹기 때문에, 보이는 UI 일부는 touch 에 반응하지 못한다. 이는 user 에게 혼란스럽게 만든다. 그래서 이 녀석 대신 FLAG_NO_FULLSCREEN 을 쓰는 것이 더 좋다. IME.. 2023. 1. 10.
[coroutine] runBlocking 에 대해 알아보자 - runBlocking 은 새로운 coroutine 을 수행하면서 현재 thread 를 interrupt 가능한 상태로 block 시킨다. 그리고 이 block 은 coroutine 이 종료될때까지 유지된다. - 이 함수는 coroutine 안에서는 사용되지 않아야 한다. (should not) runBlocking 함수는 main 함수 또는 test 에서, blocking style 이면서, suspending style 로의 넘어가기 위한 bridge 의 역할로 사용되도록 디자인 되었다. - 만약 다른 context 가 지정이 된다면, 지정된 context 에서 coroutine 이 수행되고, runBlocking 을 호출한 thread 는 block 된다. - runBlocking 에서 발생하는 .. 2023. 1. 9.
[android] android P 부터는 DNS 도 TLS 로 접근할 수 있다! - privacy 와 security 이슈로 "DNS over TLS” 가 고려되었다. (RFC 7858) - Network & Internet settings 에 가면 Private DNS 설정을 볼 수 있다. - 기본적으로 단말은 DNS server 가 DNS over TLS 를 지원한다면 그 기능을 사용한다. 하지만 의도적으로 off 시킬 수 있다. 그리고 private DNS 가 있다면 이걸 지정할 수도 있다. 그럼 모든 DNS query 는 이것을 이용한다. - App 에서는 새로운 API 인 LinkProperties.isPrivateDnsActive() 를 통해 private dns 를 사용하는지 볼 수 있다. - Reference : https://android-developers.goog.. 2023. 1. 8.
반응형