안드로이드 FrameWork 노트.

Slides:



Advertisements
Similar presentations
Page 1 Android Programming November 04 / 2009 S/W Junhyuk Jang.
Advertisements

Data : 조원 : 손정일 김태양 Unlocking android chapter.4 Intent&Service.
2013학년도 3-1 정보컴퓨터공학부 컴퓨터 소프트웨어 설계 및 실험
A n d r o i d Android 2010년 5월 19일 동서대학교 백선재
“ 안드로이드 ” 개발 환경 설정 [ 컨버전스팀 ] ㈜한 싹 2011 년 01 월 03 일.
CHAP 22. 블루투스.
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
Oozie Web API 기능 테스트 이승엽.
1. 개발 시스템 개요.
01. 안드로이드 개요와 개발환경 구축 제목.
Linux/UNIX Programming
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
최윤정 Java 프로그래밍 클래스 상속 최윤정
A n d r o i d Android 2010 년 5월 19일 작성자 : 백 선 재.
Ch.07-5 xml-rpc 사용하기 김상엽.
Network Lab. Young-Chul Hwang
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
컴퓨터 프로그래밍 기초 [Final] 기말고사
- Pipeline Submission : submit - Pipeline 등록 : register
PHP입문 Izayoi 김조흔.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
3주차 Android Application ANDROID App..
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
31강 JAVA 네트워크 JAVA 네트워크 InetAdress, URLConnection 클래스 Socket의 이해
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
자바 5.0 프로그래밍.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
소프트웨어 분석과 설계 Struts2 & JBOSS 설치하기
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
Sungkyunkwan University OS Project Dongkun Shin
자바네트워크 제2주 실습 네트워크기초, 스레드.
자바 5.0 프로그래밍.
7장 인터페이스와 추상 클래스.
Method & library.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
영상처리 실습 인공지능연구실.
Smart Workplace 개발자 가이드
제목소개 1. 안드로이드소개 2. 패킷캡쳐를 위한 환경 소개 3. ndk 소개 4. lipcap 5. 6.도식화 그림
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
CHAP 13. 서비스와 방송 수신자.
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
15강. 폼 데이터 값 검증 Validator를 이용한 검증 ValidationUtils 클래스
JA A V W. 06.
CHAP 21. 전화, SMS, 주소록.
12. 상속 : 고급.
( Windows Service Application Debugging )
Linux/UNIX Programming
소리 편집 안 재 형.
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
안드로이드 앱 분석 팀 기반의 설계 프로젝트 박민재
MIDP 네트워크 프로그래밍 ps lab 김윤경.
발표자 : 이지연 Programming Systems Lab.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
운영체제보안 3번 과제 설명 팀 기반의 설계 프로젝트 박민재
Windows System Programming
CHAP 15. 데이터 스토리지.
CODE INJECTION 시스템B 김한슬.
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
M.B.TEAM 중간 발표 (5.18) 이 제걸 백 인호.
7 생성자 함수.
Presentation transcript:

안드로이드 FrameWork 노트

Message 생성 및 Queue 삽입/추출 1 Thread (Looper / MessageQueue / Handler) 관계 Thread 객체 3 run() 함수 호출 2 start Thread 상속관계 생성 객체 HandlerThread 1 HandlerThread 생성 및 Thread start run() 함수 처리 생성 4 Looper 생성 Looper Handler Handler 생성 Message 달림 5 MessageQueue 생성 messageQueue 6 11 8 Message 추가 생성 9 추출 Handler handleMessage() 실행 Message 생성 및 Queue 삽입/추출 10 Handler Message handleMessage() Handler를 통해서 메시지 안에 Callback함수 추출 7 생성

1 Thread (Looper / MessageQueue / Handler) 관계 int what arg1 arg2 Object obj 각종 Class를 담고 참조 할 수 있도록 함 Messenger replyTo 메시지에 대한 응답을 위한 변수 long when 큐에서 메시지를 처리하기 추출 되는 시간 Bundle data Handler target 메시지를 처리하는 객체(callback우선실행 2순위) 이를 통해 실제적으로 메시지가 실행된다. Runnable callback callback 우선실행 1순위 Message next 다음 처리될 메시지의 포인터를 기억한다. static Object mPoolSync static Message mPool Pool ( Message를 늘 New하지 않고 생성된 ) static int mPoolSize Pool 개수 (Max는 10개 이지만 현재는 1개 밖에 저장 안됨) MAX_POOL_SIZE Pool 개수 최고 10개 이다.

1 Thread (Looper / MessageQueue / Handler) 관계 메시지의 callback 실행 구조 2 1 what arg1 arg2 obj replyTo when data target callback next mPoolSync mPool mPoolSize MAX_POOL_SIZE 2 callback 1 좌측 그림과 같이 우선적으로 1번이 실행되고 1번이 NULL일 경우 2번이 실행된다.

System.loadLibrary("android_servers"); 2 System Server System Server 클래스는 안드로이드의 entry point 라고 볼 수 있다. 그러므로 안드로이드의 많은 부분을 이해하려면 꼭 구조를 이해해야 할 부분이기도 하다. Dalvik 단 Framework 단 ServerThread run() 함수 처리 System Server 8 Looper 생성 1 Looper main() (server lib 로딩) Zygote System.loadLibrary("android_servers"); 9 MessageQueue 생성 2 system_init.cpp messageQueue 3 int1() JNI int1() 4 5 int2() 10 Android Context를 생성하고 모든 시스템 서비스를 각각의 Thread를 생성하여 가동한다. run() 함수 호출 7 6 Thread 객체 start() Thread 가동 11 Looper 가동 상속관계

2 System Server 1) Application Context 생성 Context는 모든 application에 필요한 정보를 담고 있다. 예) Activity1 예) Activity2 Core Context Wrapper Context Wrapper Context Context Context Context … … … ApplicationContext ContextWrapper ContextWrapper 실질적으로 모든 Context가 존재 mBase mBase core Context 레퍼런스 복사 Application Context 인스턴스는 하나의 Process 안에는 모든 Thread가 공유 된다. 단 다른 프로세스가 생성되면 새로운 Application Context가 생성된다.

2 System Server 2) 시스템 서비스들에 대해서 시스템 서비스 명 역할 power telephony.registry package activity meminfo cpuinfo activity.broadcasts activity.services activity.senders activity.providers permission content battery

2 System Server 시스템 서비스 명 역할 hardware alarm

3 SMS 서비스의 AIDL <<Interface>> IInterface asBinder() <<Interface>> Binder <native> getCallingPid() <native> getCallingUid () <native> clearCallingIdentity () <native> restoreCallingIdentity () <native> flushPendingCommands () <native> joinThreadPool () <native> init () <native> destroy () Binder() attachInterface () getInterfaceDescriptor () pingBinder () isBinderAlive () queryLocalInterface () onTransact () dump () final transact () linkToDeath () unlinkToDeath () finalize () execTransact () <<Interface>> IBinder getInterfaceDescriptor() pingBinder () isBinderAlive () queryLocalInterface () dump () transact () linkToDeath () unlinkToDeath () <<Interface>> ISMS getAllMessagesFromSimEf() updateMessageOnSimEf() copyMessageToSimEf() sendRawPdu() sendMultipartText() <<abstract>> Stub Stub() asInterface () asBinder () onTransact () <<Interface>> DeathRecipient binderDied() <<final>> BinderProxy <native> pingBinder () <native> isBinderAlive () <native> getInterfaceDescriptor () <native> transact () <native> linkToDeath () <native> unlinkToDeath () <native> destroy () queryLocalInterface () dump () BinderProxy() @override finalize() final sendDeathNotice() Proxy Proxy() asBinder() getAllMessagesFromSimEf() updateMessageOnSimEf() copyMessageToSimEf() sendRawPdu() sendMultipartText()

Local Process Remote Process 3 ISms SMS 서비스의 AIDL 1 4 8 3 2 7 5 6 ISms.stub remote에서 처리될 Interface asInterFace() 상속 1 4 Parcel 된 함수 형을 return sendRawPdu (arg1,arg2,..) 으로 풀어서 실행 Proxy 인스턴스를 받음 인스턴스 Proxy 생성 SMS Manager sendRawPdu() 메시지 발송 8 3 2 ISms.Proxy Local 에서 처리될 Interface 7 5 sendRawPdu() 메시지 발송 SimSmsInterfaceManager sendRawPdu() 구현 함수 transact process 천이 6 Parcel 객체 생성 리턴 sendRawPdu(인자) 정보를 Parcel 객체에 담는다. Remote Process return Parcel sendRawPdu ( arg 1..arg nParcel )

3 ISms Process1 Process2 SMS 서비스의 AIDL ISms.stub onTransact() remote에서 처리될 Interface onTransact() ISms.Proxy Local 에서 처리될 Interface Process1 Process2 transact Native 영역 Service Manager 단

writeTransactionData() 4 SMS IPC 구조 : 타 Process에 command 보내기 IPCThreadState transac() writeTransactionData() 타 Process에서 처리된 함수 데이터를 mOut변수 Parcel에 저장해 둔다. waitForResponse() IPC 통신을 가능하게 해주는 커널 드라이버에 해당 함수를 write한다. 결과를 받아야 하는 상황이면 Thread wait 상태가 되고 결과가 드라이버에서 처리 완료되면 드라이버에서 현재 Thread 를 깨우고 결과를 던져 준다. talkWithDriver() IPC 통신을 가능하게 해주는 커널 드라이버를 사용하는 함수이다.

writeTransactionData() 4 SMS IPC 구조 : 타 Process에 command 보내기 IPCThreadState joinThreadPool() talkWithDriver() IPC 통신을 가능하게 해주는 커널 드라이버를 사용하는 함수이다. 본 함수에서 read할 데이터가 있는지 확인한다. read할 데이터가 있으면 mIn변수 Parcel 에 저장한다. executeCommand() mIn에 데이터가 있으면 해당 정보를 파싱하여 데이터에 담긴 실행해야 할 정보를 실행한다. 만일 응답을 주어야 할 데이터가 있으면 writeTransactionData()

5 SMS 발송 과정 SmsTracker 5 6 1 4 10 7 9 2 3 8 발송 응답 Local Socket으로 메시지 발송 RILReceiver SmsManager sendRawPdu() SMSDispatcher sendSMS() SmsTracker run() 5 6 실행 Handler 메시지 발송용 Intent 작성 전달 Object 1 4 10 Looper 7 ISms (AIDL) sendRawPdu() SimSmsInterfaceManager messageQueue sendRawPdu() CommandsInterface RIL sendSMS() sendRawPdu 함수 정보를 Parcel에 담아서 저장 9 리턴 정보 RILRequest RILSender 2 공유 메모리 3 메시지 처리 정보 Object Handler 8 EVENT_SEND RIL_REQUEST_SEND_SMS

RIL Class 5 SMS 수신 과정 ReceiverThread (RIL Receiver) Run() 1 2 요청에 의한 응답 Response solicited 1 요청하지 않은 응답 Response Unsolicited 새로운 메시지가 도착 했다는 상수 2 RIL_UNSOL_RESPONSE_NEW_SMS sendBroadcast() 해당 메시지를 Broadcast 한다. 3 4 7 ACTION : Intents.SMS_RECEIVED_ACTION Extra : PDU 데이타 string 형 데이타 파싱 SmsMessage Data SMSDispatcher : EVENT_NEW_SMS 실행 Handler 5 acknowledgeLastIncomingSMS() 발신측에 메시지를 잘 받았다는 SMS 발송 6 SMS DELIVERY REPORT

Java Layer RIL Class C++ Layer 5 Local Socket SMS 수신 과정 SenderThread (RIL Sender) Local Socket Looper messageQueue ReceiverThread (RIL Receiver) Run() 요청에 의한 응답 Response solicited readRilMessage 요청하지 않은 응답 Response Unsolicited

6 Content Manager Telephony Service Bluetooth Service Connectivity 안드로이드 시스템 서비스 Content Manager Telephony Service Bluetooth Service Connectivity Service Location Manager Window Manager Activity Manager Package Manager Power Manager … 13 Add Service 11 Audio Flinger Service Manager Add Service 10 12 daemons Surface Flinger Service Manager 9 usbd 8 5 adbd System Server runtime debuggerd 6 4 7 2 3 rild Init Zygote Dalvik VM 1 커널 단 라이브러리 단 Linux Kernel Dalvik 단 Framework 단