본문 바로가기

안드로이드

(11)
안드로이드 WorkManager, Work 고찰 WorkManager와 worker에 대해 공부를 하다가 이상한 점을 발견하였다. 위와 같이 doWork의 Thread와 onStopped의 Thread가 다르다는 것 이였다. 왜 두 개의 Thread가 다른지 이해가 되지않아 WorkManager와 Worker의 동작 원리 및 내부 소스에 대해 분석해보았다. - WorkManager 1. WorkManager 초기화 기본적으로 WorkManager는 자동으로 초기화된다. 기본적으로 WorkManager는 내장 ContentProvider를 사용하여 자동으로 초기화를 한다는 내용이다. 아래는 자동으로 초기화 하는 과정이다. 위와 같이 Application 보다 먼저 ContentProvider를 사용하여 WorkManager를 초기화하는 작업을 진행한다...
안드로이드 JVM과 ART, DVM의 차이 JVM 자바 JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신이다. 1) 컴파일 자바 클래스 코드(.java 파일)는 자바 컴파일러(javac)를 사용하여 바이트 코드로 변환한다. 컴파일러는 소스 코드를 읽고 문법적으로 검사한 뒤, 바이트 코드로 변환하여 .class 파일에 저장한다. 2) 로딩 JVM은 자바 애플리케이션을 실행하기 위해 클래스 로더(Class Loader)를 통해 .class 파일들을 메모리에 로딩한다. 클래스 로더는 필요한 클래스들을 파일 시스템이나 네트워크 등에서 찾아서 JVM의 메모리에 로드한다. 3) 자바 Interpreter 와 JIT 컴파일러 1. 인터프리터는 한 줄씩 바이트 코드를 읽어들여 즉시 실행한다. 2. 인터프리터가 한 줄씩 읽..
안드로이드 Context Context란? 안드로이드에서 Context는 애플리케이션의 현재 상태 및 환경에 대한 정보를 알 수 있다. Context 역할 1. 애플리케이션 환경 정보 Context는 현재 애플리케이션의 상태 및 환경 정보를 확인할 수 있다. 예를 들어, 리소스, 애플리케이션 패키지 정보, 환경 설정, 네트워크 연결 정보 등을 얻을 수 있다. 2. 액티비티 및 서비스 시작 Context를 사용하여 액티비티 또는 서비스를 시작한다. 새로운 액티비티를 시작하거나 서비스를 시작하려면 Context를 사용한다. 3. 리소스 액세스 애플리케이션의 리소스(레이아웃, 문자열, 이미지 등)에 액세스할 때 Context가 필요하다. getResources() 메서드를 통해 리소스에 접근한다. 4. 패키지 정보 Context를 통..
안드로이드 Serializable와 Parcelable Serializable과 Parcelable은 안드로이드에서 객체를 전달할 때 사용되는 인터페이스이다. 두 인터페이스는 서로 비슷하지만, 구현 방식과 성능 면에서 차이가 있다. Serializable Serializable은 Java에서 제공하는 인터페이스로, 객체를 직렬화하여 전달한다. 객체를 바이트 스트림으로 변환한 후, 다시 역직렬화하여 객체를 복원한다. Serializable은 구현이 간단하고 사용하기 쉽지만, 객체를 직렬화하고 역직렬화하는 과정에서 많은 자원을 소모하므로 성능이 저하됩니다. Serializable 직렬화/역직렬화 예시 코드 import java.io.Serializable; public class Person implements Serializable { private Strin..
안드로이드 Room Room이란? 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 라이브러리다. 과거에는 SQLite라는 데이터베이스 엔진을 사용했지만, 여러 문제점으로 인해 ROOM 라이브러리를 사용한다. Room은 SQLite을 기반으로 한 데이터베이스 라이브러리입니다. Room은 SQLite를 더 쉽게 사용하고, 안전하게 데이터베이스 액세스를 관리할 수 있도록 도와준다. Room 구성요소 Room에는 다음 3가지 주요 구성요소가 있다. 1.데이터베이스 클래스 - 데이터베이스를 보유하고 앱의 영구 데이터와의 기본 연결을 위한 기본 액세스 포인트 역할을 한다. 2. 데이터 항목 - 앱 데이터베이스의 테이블을 나타낸다. 3.데이터 액세스 객체(DAO) - 앱이 데이터베이스의 데이터를 쿼리, 업데이트, 삽입, 삭제하는 ..
안드로이드 Hilt Hilt 란? Hilt는 Dagger 2를 기반으로 한 Android 앱을 위한 의존성 주입(Dependency Injection, DI) 라이브러리다. DI는 의존성 관리를 위한 디자인 패턴으로, 클래스 간의 의존성을 주입하여 코드를 더 모듈화하고 유지보수하기 쉽게 한다. Hilt는 DI를 더 쉽게 구현하도록 도와주는 역할을 하고, 앱의 여러 구성 요소( 액티비티, 프래그먼트, 서비스 등 )에 대한 의존성 주입을 자동화한다. 여기서 "의존성"은 한 클래스가 다른 클래스나 객체를 사용하기 위해 필요한 것이다. 예를 들어, 액티비티가 데이터베이스 서비스를 사용해야 할 때, 데이터베이스 서비스는 액티비티의 의존성이 된다. Application Class ( SingletonComponent ) 우선 Hilt..
안드로이드 AppCompatActivity 분석 안드로이드 AppCompatActivity란 무엇이고 어떻게 compatibility 할 수 있는지 분석해봤다. AppCompatActivitiy란 간단히 설명하자면 Acitivity는 사용자 인터페이스(UI)를 표시하고 상호작용 하는 화면의 단위이다. api 버전간 호환성을 제공하는 지원 라이브러리가 AppCompatActivity 이다. 즉, 이전 버전과의 호환성 때문에 AppCompatActivity를 사용한다. 여기서 어떻게 이전 버전과 호환성을 제공받을 수 있는지 분석해보자. 우선 AppCompatAcitivity 내부 소스를 보자. AppCompatActivity 클래스는 AppCompatDelegate 객체를 생성하고, 'delegate' 참조 변수를 생성한다. AppCompatDelegat..
안드로이드 화면을 그리는 과정 setContentView()를 호출하여 화면을 그릴 때 내부적으로 어떠한 동작이 있는지 찾아보았다. setContentView()의 내부 소스는 아래와 같다. 위와 같이 Activity는 클래스 파일이고 setContentView() 메서드의 내부 소스를 볼 수 없었다. Android Code Search에서 Activity.java 코드를 찾아볼 수 있었고 내부 소스는 아래와 같다. Activity의 setContentView메서드를 호출하면 PhoneWindow 클래스의 setContentView메서드를 호출한다. PhoneWindow는 어떤 클래스인지 확인해봤다. PhoneWindow 클래스는 Acitivity에서 제공하는 Window이다. UI 계층 구조에서 뷰 계층(View Hierarchy)..