지난 시간에 안드로이드 스레드, 프로세스간 통신 기법과 원리에 대해서 장시간 설명했다.오늘은 쉬어가는 의미에서 안드로이드 메모리 관리는 어떻게 되는가에 대해서 간단히 살펴보도록 하자. 메모리 관리가 왜 중요한가? 메모리 누수는 응용프로그램에 있어서 crash를 초래할 뿐만 아니라 기기 전체에 영향을 미쳐서 성능을 저하시키므로 메모리 관리가 필수적이다. 우리는 오늘 프로그램의 정확한 설계를 통해 스레드와 관련된 메모리 누수의 위험을 관리하기 위한 전략을 배워보도록 하자. 6.1 가비지 컬렉션 달빅 VM은 메모리가 너무 커질 때, 힙이라는 공유 메모리로부터 가비지 컬렉터(GC)로 할당된 메모리를 주기적으로 회수하는 메모리 관리 시스템이다. 힙 외부에서 접근할 수 있는 모든 객체는 GC루트로 간주되고, 스레드..
재귀 함수의 필요성 예제: 중첩 반복문 대체하기 0번부터 차례대로 번호 매겨진 n개의 원수 중 네 개를 고르는 모든 경우의 수를 출력하라 보통 아래와 같이 작성할 수 있다. for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { for (int l = k + 1; l < n; l++) { System.out.println(i + "," + j + "," + k + "," + l); } } } } 만약 다섯개를 골라야 한다면? 6개를 골라야 한다면 ? 7개를 골라야한다면? (5중, 6중, 7중 for문을 쓰면 되지만 코드가 길고 복잡해진다.) 재귀호출을 사용하면 단순한 반복문보다 간결하고..
지난시간까지 하나의 프로세스 안에서 돌아가는 여러 스레드의 통신에 대해서 알아 보았다. 주로 공유메모리(힙)를 이용한 통신이고 동시 접근이나, 스케줄링을 하는 원리에 대해서 배워 보았다. 이번 시간에는 안드로이드에서의 프로세스 간의 통신에 대해 알아보도록 하자. 개요안드로이드 플랫폼은 바인더(binder) 프레임워크를 통해 프로세스 경계를 넘는 통신, 즉 프로세스 간 통신(IPC)를 지원한다. 바인더 프레임워크는 스레드 사이에 공유하는 메모리 영역이 없을 떄, 데이터 트렌젝션을 관리한다. IPC사용 예 : 인텐트, 시스템 서비스, 콘텐트 프로바이더 등 안드로이드 구성요서에 의해 처리된다. 5.1 안드로이드 RPC IPC는 시그널, 파이프, 메시지 큐, 세마포어, 공유 메모리와 같은 여러 IPC 기술을 지..
문제 . 1차원 배열에서 연속된 부분 구간 중 그 합이 최대인 구간을 찾는 문제. 예) 배열 [-7, 4, -3, 6, 3, -8, 3, 4] 에서 최대 합을 갖는 부분 구간은 [4, -3, 6, 3] 으로 합은 10 이다 그냥 생각 같아선 다음과 같이 구할 수 있지만, 반복문이 3개이기 때문에 O(N^3)의 시간 복잡도가 걸리기 때문에 좋지 않다. private int inefficientMacSum(int[] arr) { int N = arr.length; int ret = 0; for(int i =0; i< N ; i++) { for(int j = i; j< N; j++) { // A[i,j] 의 합 int sum = 0; for (int k=i; k
지난시간까지 안드로이드의 스레드 종류와 우선순위에 대해서 알아보았다. 이번 시간에는 일반적인 스레드 통신 기법과 안드로이드에서의 스레드 통신 기법에 대해서 알아보도록 하자. 단방향 데이터 파이프를 통한 데이터 전달공유 메모리 통신블로킹 큐를 사용하는 소비자-생성자 패턴 구현메시지 큐의 동작UI 스레드로 태스크 전송 4.1 파이프java.io 패키지의 일부생산자 스레드는 파이프에 데이터를 기록하고 소비자 스레드는 파이프에서 데이터를 읽는다.단방향 스레드이기 때문에 한쪽에서 읽기만하고 한쪽에선 쓰기만 한다.소비자 생성자 패턴에 사용된다. 4.1.1 기본 파이프 사용 방법 연결 설정 PipedReader r = new PipedReader(); PipedWriter w = new PipedWriter(); w..
RecyclerView 안드로이드에서 보통 리스트를 구현할 때는 ListView를 이용하지만 웹에서의 대용량 데이터를 처리할 때에 ListView를 사용하게 되면 버벅이는 현상을 보게 될 것이다. RecyclerView는 List구성에 성능을 개선한 최적화된 안드로이드 support.widget의 View이다. 참고 page : https://developer.android.com/training/material/lists-cards.html The RecyclerView class simplifies the display and handling of large data sets by providing:Layout managers for positioning itemsDefault animations f..
학습 목표.UI, 바인더, 백그라운드 스레드의 유사점과 차이점리눅스 스레드 결합(coupling)스레드 스케줄링이 응용프로그램 프로세서의 순위에 영향을 받는 방식리눅스 스레드 실행 3.1 안드로이드 응용프로그램 스레드응용프로그램 관점에서 스레드는 UI, 바인더, 백그라운드 스레드 등 3가지 유형이 있음 3.1.1 UI Thread 수명 : 응용 프로그램의 시작과 함께 실행되고, 응용프로그램의 프로세스와 같은 수명을 갖는다.역할 : 안드로이드의 구성요소를 실행하고, 화면 UI요소를 변경하는데 사용하는 메인스레드 (다른 Thread에서 UI변경을 시도하려는 것을 발견하면 CalledFromWorngThreadException 발생)동시성 문제? : UI요소는 UI스레드에서만 접근하기 때문에 UI요소에 대한 ..
스레드 정의 응용 프로그램 관점에서 스레드는 순차적으로 수행되는 자바 문장들로 이루어진 코드 경로의 실행이다. 하나의 작업에서 실행하는 작업의 단위를 '테스크' 라고 한다. // Thread 정의 private class MyTask implements Runnable { public void run() { int i = 0; } } // 사용 부분 Therad myThread = new Thread(new MyTask()); myThread.start(); CPU는 한번에 하나의 스레드를 실행시킬 수 있다. 그러나 일반적으로 시스템은 여러 응용프로그램이 동시에 처리해야하는 멀티스레드를 보유한다. 그러기 위해서는 CPU는 응용프로그램의 스레드 사이의 처리 시간을 공유해야 하는데 이는 스케줄러에 의해 스레..
개요안드로이드 킷켓(kitkat) 버전 이후부터는 선택적으로 Art 모드로 application을 컴파일 시킬 수 있다. 그 이후 버전은 default로 Art모드로 컴파일 된다. Dalvik 컴파일 (JIT type)컴파일 시점 : 앱이 실행하는 시점장점 : 컴파일 이전에는 패키지 형태로 압축되어 있기 때문에 용량을 덜 먹는다. 단점 : 실행할 때마다 새로 컴파일 해서 구동되기 때문에, CPU 효율성이 떨어지고, 베터리 효율이 좋지 않음. Art 컴파일 (AOT type)컴파일 시점 : 앱이 설치되는 시점장점 : CPU 효율성이 좋고, 베터리 효율이 좋다.단점 : 컴파일을 미리 했기 때문에 용량을 더 먹는다.
해당 책을 통해서 정리를 진행하도록 하겠습니다. 간략한 내용은 다음과 같습니다. Part 1에 대해서는 멀티스레딩을 왜 해야하는가에 대해서 정확히 숙지를 하고, part2의 심화과정으로 넘어가도록 하자. Part1 기초. 1. 자바의 멀티스레딩2. 안드로이드 스레드3. 스레드 통신4. 프로세스 간 통신5. 메모리 관리 Part2 비동기 기법1. 기본 스레드의 생명주기 관리2. 핸들러 스레드 : 고수준 큐 메커니즘3. Excutor 프레임워크를 통한 스레드 제어4. AsyncTask로 백그라운드 태스크를 UI 스레드에 묶기5. 서비스6. 인텐트 서비스7. AsyncQueryHandler를 이용한 콘텐트 프로바이더 접근8. 로더를 이용한 자동 백그라운드 실행9. 비동기 기술의 선택