본문 바로가기

gyu__b

(90)
[ Android ] Foreground Service 와 BackGround Service 안드로이드 개발을 하다보면 백그라운드 실행이 필요한 작업을 수행해야될 때가 있는데요. 이럴 때 메인 스레드가 아닌 서브 스레드를 생성하여 사용하게 됩니다. 하지만 서브 스레드로만 작업을 수행하게되면 액티비티나 프래그먼트에서 onDestroy()가 호출 되거나, 서브 스레드의 작업이 끝났을 때 해당 Activity가 존재하지 않는 상태라면 UI 갱신이 불가합니다. 이러한 경우에 필요한 안드로이드의 컴포넌트가 바로 Service입니다. 서비스는 안드로이드 컴포넌트 중 하나로, 기본적으로 메인 스레드에서 실행되며 UI가 없습니다. 이 서비스에서의 백그라운드 스레드는 개발자가 직접 관리를 해야하는데 서비스에는 백그라운드 서비스와 포어그라운드 서비스, 바인드 서비스가 있는데 이번 글에서는 백그라운드 서비스와 포그..
[JAVA] JVM 클래스로더 클래스로더의 역할은 Loading, Linking, Initialization로 3가지가 있습니다. 1) Loading: 클래스로더는 .class 파일을 읽어 바이트 코드를 메서드 영역에 저장합니다. 각 파일은 JVM에 의해 메서드 영역에 다음의 정보들을 저장합니다. - 로드된 클래스를 비롯한 그의 부모 클래스의 정보 - class 파일이 다른 Class, Interface, Enum과의 관련한 정보 - 변수나 메서드의 정보 등 .class 파일이 로딩된 후에는 JVM은 힙 메모리 영역에 이 파일이 나타내는 클래스 유형의 객체를 생성합니다. 2) Linking: 증명(verification), 준비(preparation), 해결(resolution) 3가지를 수행합니다. - 증명: .class 파일의 정..
[ Android ] Service 안드로이드 4대 컴포넌트(Activity, Service, Broadcast Reciever, Content Provider) 중 서비스에 대해 글을 쓰고자 합니다. 서비스란? - 4대 컴포넌트 중 하나 - UI가 따로 없고 백그라운드에서 동작하는 컴포넌트 - 즉, 서비스를 실행한 앱에서다른 앱으로 전환하더라도 서비스에서 시작한 작업은 백그라운드에서 계속 실행된다. - 만약 Service가 실행되고 있는 상태라면, 안드로이드 OS 에서는 해당 Process를 왠만하면 죽이지 않도록 방지하고 관리하게 된다. - 그렇기에 메모리 부족 등 특별한 경우를 제외하고는 백그라운드 동작을 수행한다. 서비스가 필요한 이유 - Activity 화면에서의 동작 뿐 아니라, Activity가 종료되어 있는 상태에서도 동작하..
[ JAVA ] JAVA의 동작 방식와 JVM 메모리 구조 1. 일반 프로그램과 비교 1) 자바는 JVM 위에서 실행되기 때문에 OS에 독립적입니다. - 즉, JVM만 설치한다면 OS에 상관없이 돌아갑니다. 2) JVM의 특징 - 자바 소스 코드 컴파일 후 생성된 파일이 해석(interpret)과 Link없이 바로 JVM에 적재 되고, OS로부터 메모리를 할당받아 GC(Garbage Collection)를 통해 스스로 메모리 관리를 한다는 특징이 있습니다. 2. Java 동작 방식 1) 작성한 자바 소스(.java)를 자바 컴파일러(javac)를 통해 자바 바이트 코드(.class)로 컴파일 합니다. - 자바 바이트 코드: JVM이 이해할 수 있는 코드로 아직 컴퓨터는 읽을 수 없는 반기계어이다. 자바 바이트 코드의 각 명령어는 1바이트 크리의 Opcode와 추..
[ JAVA ] Java의 특징 및 JVM, JDK, JRE 1. Java의 특징 1) JVM만 설치하면 컴퓨터의 운영체제에 상관없이 동작한다. 2) 가비지컬렉터(GC)가 메모리 관리를 해준다. 3) 객체지향 프로그래밍 언어이다, * 객체지향 프로그래밍이란? - 객체를 만들기 위한 설계도인 클래스를 작성하고 - 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어낸다. - Java는 객체지향 언어가 가져야 할 캡슐화, 상속, 다형성 기능을 완벽하게 지원한다. 4) 멀티스레드를 쉽게 구현할 수 있다. - 자바는 스레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있습니다. 5) 동적 로딩(Dynamic Loading)을 지원한다. - 애플리케이션이 실행 될 때 모든 객체가 생성되지 않고, 각 객체가 필요한 시점에 클래스를 동적 로딩해서 생성한다. - 또한, ..
[RxJava] RxAndroid 적용 예제 -1 원본 : https://www.raywenderlich.com/141980/rxandroid-tutorial RxJava를 공부하며 스케줄러, 함수 등 기본을 익히고 나서 바로 앱에 적용하려니 역시나,, 쉽지 않더라구요 그래서 참고할만한 예제를 찾아보던 중 RxAndroid의 기본 개념은 물론이고 사용법도 쉽게 나와있는 곳이 있어서 번역 및 수정을 해봤습니다! Reactive programming 은 그저 또하나의 API가 아니라, 완전히 새롭고 매우 유용한 패러다임이다. RxJava는 이 패러다임을 안드로이드에서 사용할 수 있게 구현한 것이다. 여기에 비동기 UI 이벤트를 RxJava 스럽게 구현한 RxAndroid를 이용하면 안드로이드는 reactive world를 시작하기에 더없이 완벽하다. 이 튜..
[RxJava] RxJava의 핵심 스케줄러 - 2 :트램펄린 스케줄러, 싱글 스레드 스케줄러, Executor 변환 스케줄러 1. 트램펄린 스케줄러 트램펄린 스케줄러는 새로운 스레드를 생성하지 않고 현재 스레드에 무한한 크기의 대기 행렬(Queue)을 생성하는 스케줄러입니다. 새로운 스레드를 생성하지 않는다는 것과 대기 행렬을 자동으로 만들어 주는 것이 뉴 스레드 스케줄러, 계산 스케줄러, IO 스케줄러와 다른 부분입니다! val orgs = arrayOf("1","3","5") Observable.fromArray(orgs).subscribeOn(Schedulers.trampoline()) .map{it-> ""} .subscribe(Log::i) Observable.fromArray(orgs).subscribeOn(Schedulers.trampoline()) .map{it-> "##$it##"} .subscribe(Log:..
[RxJava] RxJava의 핵심 스케줄러 - 1 :뉴 스레드 스케줄러 , 계산 스케줄러, IO 스케줄러 스케줄러는 RxJava의 핵심이라고 말할 수도 있을 만큼 중요한 요소인데요. 어떤 프로그램의 세부 일정을 주관하는 관리자로 생각하면 이해하기 쉽습니다! 이제 RxJava의 종류에 대해서 알아보겠습니다! [ RxJava 2.x 기준] - 뉴 스레드 스케줄러 = newThread() - 싱글 스레드 스케줄러 = single() - 계산 스케줄러 = computation() - IO 스케줄러 = io() - 트램펄린 스케줄러 = trampoline() 이렇게 다섯가지로 구분할 수 있어요. 이제 각 스케줄러를 보다 구체적으로 알아볼게요! 아! 들어가기 전에 함께 자주 쓰이는 메소드 몇 개를 간단하게 알아볼게요. (다음 글들에서 자세히 다룰 예정입니다!) - doOnNext(): Observable에서 onNex..