본문 바로가기
[android/안드로이드] aidl 을 이용하여 service 에 bind 하기. 안녕하세요 돼지왕왕돼지입니다. 오늘은 aidl을 이용하여 원격 서비스에 bind 하는 방법에 대해 알아보도록 하겠습니다. AIDL 이 뭐고, 왜 필요해요? - Android에서는 기본적으로 process간 memory 접근이 불가능합니다. Process간 Communication을 위해서는 운영체제가 이해할 수 있는 primitive형태로 object를 marshalling ( 분해의 개념 ) 받는 측에서 unmarshalling ( 조립의 개념 ) 해준다면 가능합니다. - AIDL ( Android Interface Definition Language ) 가 marshalling & unmarshalling 작업을 해줍니다. (직접하려면 엄청 어렵다고 합니다.) 이 AIDL을 통해 IPC ( Inter.. 2012. 2. 8.
[android/안드로이드] activity chooser? activity selector? 안녕하세요 돼지왕왕돼지입니다. 오늘은 Activity Chooser ( or selector ) 로 알려진 녀석에 대해 알아보겠습니다. 이 녀석이 뭐 하는 녀석인지, 그리고 이 녀석을 어떻게 호출하는지를 알아보는 글입니다. Activity Chooser 가 뭐예요? Intent 를 날릴 때, setType에 정의된 type과 관련이 있는 모든 App 을 list 형태로 제공해주는 것입니다. 그래서 User 가 어떤 activity 를 통해 작업할지를 선택하는 것이죠. 가장 공감이 갈만한 예를 들자면, 카카오톡에서 사진을 보내려고 할 때, 그림을 보는 app 이 여러개 설치되어 있다면, 어떤 Gallery 를 통해서 사진을 선택할지 Activity Chooser 가 뜨게 되죠. Activity Choose.. 2012. 2. 7.
[android/안드로이드] ContentObserver 뭐하는 녀석인지 알아봅시다. 안녕하세요 돼지왕왕돼지입니다. 오늘은 ContentObserver 라는 녀석이 뭐 하는 녀석인지 함께 알아봅시다. ContentObserver 넌 누구냐? ContentObserver 는 해당 URI 를 Observe 하다가, 변경이 생기면 알려주는 놈입니다. Observer 사용 방법을 알려주세요. Observer 를 등록하는 방법은 다음과 같습니다. ContentResolver cr = getContentResolver(); ContentObserver contentObserver = new ContentObserver( new Handler() ){ public void onChange( boolean selfChange ){ super.onChange( selfChange ); // do sth... 2012. 2. 7.
[android/안드로이드] Android requires .class compatibility set to 5.0. Please fix project properties. 해결방법 안녕하세요 돼지왕왕돼지입니다. 오늘은 다른 프로젝트를 import 했을 때 발생하는 에러 중 하나인 compatibility 문제 해결 방법을 알아보겠습니다. 먼저 에러메세지는 다음과 같습니다. Android requires .class compatibility set to 5.0. Please fix project properties. 1. 해당 project에서 우클릭 2. [Android Tools] -> [Fix Project Properties] 3. F5 로 refresh. ( 또는 우클릭 후 Refresh ) 4. [Project] -> [Clean] 시켜준다. 5. 해결! 모두들 해결하셨길 빕니다. 로그인 없이 추천 가능합니다. 손가락 꾸욱~ 2012. 2. 7.
[android/안드로이드] boot.img 와 system.img 의 정체 안녕하세요 돼지왕왕돼지입니다. 직업 특성상, 새로운 framework 이미지를 갈아엎을 일이 많이 있습니다. 그때마다 올리는 boot.img 와 system.img 의 정체에 대해 궁금해져서 알아봤습니다. boot.img 와 system.img 의 정체 boot.img = boot header + Linux kernel + ramdisk/rootfs system.img = Android user space applications and libraries 자 이해가 가시나요? 정확히는 아니어도, 이 녀석들이 뭘 담당하는 녀석들인지 감은 잡을 수 있을 것입니다. Upgrade 할 때 꼭 필요한 녀석들만 upgrade 해도 될 것 같습니다. 로그인 없이 추천 가능합니다. 손가락 꾸욱~ 2012. 2. 7.
[android/안드로이드] managedQuery 와 일반 query 의 차이점 안녕하세요 돼지왕왕돼지입니다. 오늘은 managedQuery 와 일반 query의 차이점에 대해 알아보고자 합니다. 내용은 매우 simple 합니다~ managedQuery() = ContentResolver.query() + startManagingCursor( Cursor ) 입니다. 여기서 startManagingCursor( Cursor ) 가 하는 일은, activity가 pause 될 때, 이 cursor에 deactivate() 작업을 해주어 메모리 손실을 줄여주고, activity가 resume 될 때, requery() 를 해주어 원래의 내용이 들어가도록 해주는 것이죠. activity가 destroy될 때는 마찬가지로 close() 까지 해주는 좋은 manager입니다. 한번 쿼리를 한.. 2012. 2. 7.
[android/안드로이드] 안드로이드 부팅과 커널 구조에 대한 기초. 안녕하세요 돼지왕왕돼지입니다. 오늘은 안드로이드의 부팅과 커널 폴더 구조에 대한 기초자료들을 함께 보고자 합니다. 안드로이드 부팅과 커널 폴더 구조를 왜 알아야 하는가? 프레임워크의 구조에 익숙하고 그것의 동작 원리를 제대로 파악하면, 어떤 개발 시나리오라도 주눅들지 않을 수 있습니다. 게다가 안드로이드 프레임워크를 잘 알면 최적화된 S/W 설계를 하는 데 도움도 됩니다. 물론 여기서 다루는 간단한 소개정도로는 의도가 정확히 이루어지지 않지만, 출발점이 되겠습니다. 안드로이드 소스 폴더 구조 kernel: Linux 2.6bionic : 표준 C lib bootloader : 참고용 부트 로더 build : 빌드 시스템 cts : 호환성 테스트 관련 소스 dalvic : 가상 머신 external : 오.. 2012. 2. 7.
[android/안드로이드] framework source eclipse 에 import 하기. 안녕하세요 돼지왕왕돼지입니다. Android Framework Source 를 download 받았는데, Java단 소스를 분석하고 싶은데. 이클립스에서 load 하면 c, cpp는 물론 header 까지 다 불러오고, Reference 추적 등의 기능이 제대로 작동하지 않아 짜증나셨죠? 다음과 같이 하면 이클립스에서 framework를 import 하고, 일반 project 처럼 사용할 수 있습니다. (물론 소스 전체에 대해 지원되는 것이 아니고, 일부에 대해 지원이 됩니다. 그래도 참 편리하죠 ) 이클립스에서 framework 불러오기 안드로이드 framework의 development/ide/eclipse/.classpath 를 framework source 의 root 폴더에 붙이고, ( 여기서는.. 2012. 2. 7.
[android/안드로이드] 죽지 않는 service 만들기 ( 사실은.. 지속적인 부활 ) 안녕하세요 돼지왕왕돼지입니다. 이번에는 죽지 않는 서비스 만드는 방법을 함께 알아볼까 합니다. 사실 죽지 않는 서비스는 만들지 않는 것이 좋습니다. 대부분 Service 가 죽는 경우는 안드로이드 단말 자체의 메모리가 부족하여 Framework 가 강제로 kill 하거나, 아니면 Fatal Exception이 있어 죽는 경우인데 죽지 않는 서비스를 만들어 죽는 서비스를 계속해서 살려 버린다면.. 메모리 문제는 해결되지 않고, Fatal Exception의 경우 계속해서 발생하겠죠.. 따라서 죽지 않는 서비스를 만들 때에는 반드시 "이 서비스가 "무조건" 살아 있어야만 하는가?" 에 대해 다시 한번 생각하고 만드시길 바랍니다. 죽지 않는 서비스는 "Alarm Service" 를 이용하여 구현하면 쉽습니다... 2012. 2. 7.
반응형