일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 서비스 vs 쓰레드
- 객체
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛테스트란
- 서비스 쓰레드 차이
- 안드로이드 라이선스 종류
- rxjava hot observable
- android ar 개발
- ANR이란
- 큐 자바 코드
- rxjava cold observable
- 안드로이드 라이선스
- 스택 큐 차이
- 안드로이드 os 구조
- 멤버변수
- 2022 플러터 설치
- 플러터 설치 2022
- 안드로이드 유닛 테스트
- 안드로이드 레트로핏 crud
- 스택 자바 코드
- Rxjava Observable
- 안드로이드 레트로핏 사용법
- 클래스
- 자바 다형성
- android retrofit login
- jvm 작동 원리
- 안드로이드 유닛 테스트 예시
- jvm이란
- ar vr 차이
- rxjava disposable
- Today
- Total
목록스터디 (20)
나만을 위한 블로그
구성 변경 시 기본 동작 액티비티 파괴, 재생성 : 시스템이 현재 액티비티의 onPause, onStop, onDestroy를 호출하고 액티비티가 새로운 구성으로 onCreate를 호출해 재생성된다리소스 재로드 : 시스템은 새 구성에 따라 레이아웃, 드로어블 등을 다시 불러와서 앱이 화면 방향, 테마 등 변경사항에 적응할 수 있게 한다데이터 손실 방지 : 재생성 시 데이터 손실을 막기 위해 onSaveInstance, onRestoreInstanceState나 뷰모델을 써서 인스턴스 상태를 저장, 복원할 수 있다 액티비티 재생성 피하기 액티비티 재시작 없이 구성 변경을 처리하려면 매니페스트의 android:configChanges 속성을 쓸 수 있다. 이것은 구성 변경을 프로그래밍 방식으로 처리하는 책임..
어떤 경우 프래그먼트는 다른 프래그먼트나 호스트 액티비티 간 1회성 값을 보내야 한다. QR 코드 스캔 프래그먼트가 그 예시다.보내는 프래그먼트에서 받는 프래그먼트로 데이터를 보내려면 아래처럼 할 수 있다. 받는 프래그먼트에 result 리스너 설정보내는 프래그먼트에서 requestKey를 써서 결과 전송 받는 프래그먼트에서 result 리스너 설정 받는 프래그먼트에선 setFragmentResultListener()를 써서 리스너를 등록해야 하고, 이 리스너가 STARTED 상태일 때 결과를 받게 해야 한다. class FragmentA : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(..
액티비티 간 데이터 전달 가장 일반적인 메커니즘은 인텐트다. 데이터는 키밸류 쌍으로 인텐트에 추가되며 받는 액티비티는 getIntent로 그 데이터를 가져온다. // 보내는 액티비티val intent = Intent(this, SecondActivity::class.java).apply { putExtra("USER_NAME", "John Doe") putExtra("USER_AGE", 25)}startActivity(intent)// 받는 액티비티class SecondActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceSta..
컴포넌트(액티비티, 프래그먼트, 서비스) 간 데이터 전달에 쓰이는 키밸류 데이터 구조. 앱에서 적은 데이터를 효율적으로 전송하는 데 쓰인다. 가벼운 구조로 설꼐되어 안드로이드가 데이터를 쉽게 관리, 전송할 수 있는 형식으로 시리얼화한다. Bundle의 공통 사용 사례 액티비티 간 데이터 전달 : 새 액티비티 시작 시 인텐트에 번들을 첨부해서 대상 액티비티에 데이터 전달프래그먼트 간 데이터 전달 : 프래그먼트 트랜잭션에서 setArguments, getArguments와 같이 쓰여서 프래그먼트 간 데이터 전달인스턴스 상태 저장, 복원 : onSaveInstanceState, onRestoreInstanceState 같은 생명주기 함수에서 구성 변경 시 임시 UI 상태를 저장, 복원 시 쓰임서비스에 데이터 ..
Task 유저가 특정 목표를 달성하기 위해 상호작용하는 액티비티들의 집합백스택에 조직돼 있고 마지막에 추가된 액티비티가 먼저 실행되는 후입선출(LIFO) 구조다.액티비티는 실행 시 백스택에 추가되며 유저가 이전 Task로 돌아가거나 시스템이 자원 회수 시 제거된다. 백스택 Task 안의 액티비티 히스토리를 유지한다. 유저가 새 액티비티로 이동 시 현재 액티비티가 스택에 추가된다. 백버튼을 누르면 스택의 최상위 액티비티가 제거되고 그 아래 액티비티가 제거된다.이 메커니즘은 직관적 탐색, 유저 워크플로우의 연속성을 보장한다. launch mode, 인텐트 플래그는 Task 내 액티비티의 동작을 제어하는 메커니즘이다. 이런 구성은 개발자가 액티비티가 어떻게 실행되고 다른 액티비티와 상호작용하는지 정의할 수 있..
딥링크는 유저가 URL, 알림 등 외부 소스에서 앱 내 특정 화면, 기능으로 직접 이동할 수 있게 한다. 이걸 처리하려면 매니페스트에 딥링크를 정의하고 해당 액티비티, 프래그먼트에서 들어오는 인텐트를 처리해야 한다.딥링크를 사용하려면 먼저 매니페스트에서 딥링크를 처리해야 하는 액티비티에 인텐트 필터를 선언해야 한다. 인텐트 필터는 앱이 응답하는 URL 구조와 스키마를 지정하기 위해 필요하다. scheme은 URL 스키마를 지정하고, host는 도메인을 지정한다. pathPrefix에는 경로를 정의한다.이제 액티비티에선 들어오는 인텐트 데이터를 가져와서 파싱하고 화면을 이동하거나 특정 작업을 수행할 수 있다. class MyDeepL..
ANR은 메인 쓰레드가 너무 오래 차단되어 발생하는 에러다. 일반적으로 5초 이상 차단될 경우 발생하고 ANR이 발생하면 안드로이드는 앱을 닫거나 응답 대기를 안내한다. ANR이 발생하는 원인은 아래 중 하나일 수 있다. 메인 쓰레드에서 5초 이상 지속되는 무거운 계산 작업장시간 실행되는 네트워크, DB 작업메인 쓰레드에서의 동기식 작업으로 인한 UI 작업 차단 ANR 방지 방법 메인 쓰레드의 응답성을 위해 무거운 작업은 메인 쓰레드에서 수행하지 않는 게 필수적이다. 아래는 몇 가지 권장사항이다. 메인 쓰레드에서 무거운 작업 실행하지 않기 : 파일 I/O, 네트워크 요청 같은 걸 처리할 땐 백그라운드 쓰레드를 활용한다. 코루틴, IO 디스패처를 써서 백그라운드 작업 관리를 효율적으로 할 수 있다지속적 작..
안드로이드는 안 쓰는 메모리는 자동 회수하는 GC 메커니즘을 통해 메모리를 관리해서 활성된 앱, 서비스에 효율적으로 메모리가 할당되는 걸 보장한다.C++ 같은 언어처럼 직접 메모리를 할당, 해제할 필요가 없다. 달빅 또는 ART 런타임은 메모리 사용량을 모니터링하고 안 쓰는 객체를 정리해서 과한 메모리 소비를 방지한다.안드로이드는 low-memory killer를 써서 시스템 메모리가 부족할 때 백그라운드 프로세스를 종료해 포그라운드 앱의 원활한 작동을 우선시한다. 메모리 누수 막기 생명주기 인식 컴포넌트 사용 : 뷰모델, Flow 같은 생명주기 인식 컴포넌트를 collectAsStateWithLifecycle 또는 LiveData와 같이 쓰면 해당 생명주기 종료 시 리소스가 적절하게 release된다...
화면 회전, Locale 변경, 다크 모드 전환 등 이벤트 발생 시 원활한 UX를 유지하려면 구성 변경 처리는 필수적이다.안드로이드는 기본적으로 이런 변경이 발생하면 액티비티를 재시작하기 때문에 UI 상태가 일시적으로 손실될 수 있다.이걸 효과적으로 처리하려면 아래 전략을 시도할 수 있다. UI 상태 저장, 복원 : 액티비티 재생성 중 UI 상태를 보존, 복원하려면 onSaveInstanceState와 onRestoreInstanceState를 구현한다. 이렇게 하면 구성 변경 후 유저가 같은 상태로 돌아갈 수 있다제트팩 뷰모델 : ViewModel 클래스를 써서 구성 변경 후에도 유지되는 UI 관련 데이터를 저장한다. 뷰모델 객체는 액티비티 재생성보다 오래 지속되게 설계돼서 이런 이벤트 중에 데이터 관..
구조화된 데이터 집합에 대한 접근 관리, 앱 간 데이터 공유를 위한 표준화된 인터페이스를 제공하는 컴포넌트다른 앱, 컴포넌트가 데이터 쿼리, 삽입, 업데이트, 삭제에 쓸 수 있는 중앙 저장소 역할을 해서 앱 간 안전하고 일관된 데이터 공유를 보장한다.여러 앱에서 같은 데이터에 접근해야 하거나 DB, 내부 저장소 구조 노출 없이 다른 앱에 데이터를 줘야 할 경우 유용하다 컨텐츠 프로바이더의 목적 데이터 접근 로직을 캡슐화해서 앱 간 데이터를 쉽고 안전하게 공유할 수 있게 한다SQLite, 파일 시스템, 네트워크 기반 데이터 등 기본 데이터 소스를 추상화하고 데이터와 상호작용할 수 있는 통합 인터페이스를 제공한다 컨텐츠 프로바이더의 주요 구성요소 데이터 접근을 위해 URI를 사용하는데 URI는 아래 항목들로..