1 / 24

임지희 ambomis@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.07.24

Android CH5. Thread 와 오류상태. 임지희 ambomis@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.07.24. 목차. 안드로이드 Thread 루퍼 AsyncTask 안드로이드 프로세스 자이고트. IST (Information Sciences & Technology) Laboratory. 안드로이드 Thread (1/4). 안드로이드 Thread 의 필요성과 구현법 스레드 여러 작업을 동시에 수행하기 위해 사용 선언방법.

lane-cherry
Télécharger la présentation

임지희 ambomis@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.07.24

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Android CH5. Thread 와 오류상태 임지희 ambomis@kunsan.ac.kr 군산대학교 통계컴퓨터과학과 정보과학기술 연구실 2012.07.24

  2. 목차 • 안드로이드Thread • 루퍼 • AsyncTask • 안드로이드 프로세스 자이고트 IST (Information Sciences & Technology) Laboratory

  3. 안드로이드Thread (1/4) • 안드로이드Thread의 필요성과 구현법 • 스레드 여러 작업을 동시에 수행하기 위해 사용 • 선언방법 IST (Information Sciences & Technology) Laboratory

  4. 안드로이드Thread (2/4) • 핸들러 • 핸들러란? - 안드로이드에서스레드간의 통신을 담당 하는 객체 - 백그라운드스레드와메인스레드사이에 메시지를 통해 백그라운드스레드에서 값이 변경된 것을 알리거나 메인스레드의 값을 갱신하도록 요청하는 등을 담당 IST (Information Sciences & Technology) Laboratory

  5. 안드로이드Thread (3/4) • 핸들러 • 핸들러선언의 예 IST (Information Sciences & Technology) Laboratory

  6. Click!

  7. 루퍼(1/3) • 루퍼 • 루퍼란? - 메시지 큐에서 메시지를 꺼내어 핸들러로 전달 하는 역할을 하는 클래스. (메시지 큐는 자동으로 전달받은 메시지들을 실행하는 기능이 없기 때문에 루퍼를 사용해서 메시지를 처리함) - 무한으로 실행되는 메시지 루프를 통해 큐에 메시지가 들어오는지 감시 하며, 들어온 메시지를 처리할 핸들러를찾아 handler메소드를 호출 한다. IST (Information Sciences & Technology) Laboratory

  8. 루퍼(2/3) • 루퍼 • 스레드를 상속받은 LooperThread클래스를 스레드를 실행하면서 메시지큐에서 실행될 핸들러를 호출하는 예 IST (Information Sciences & Technology) Laboratory

  9. // 현재 스레드의루퍼 준비 //큐에서 메시지를 꺼내 핸들러로 전달하는 루프를 실행 //quit() 메서드를만날때 까지 루프를 실행시킴 Click! IST (Information Sciences & Technology) Laboratory ① ②

  10. Async Task (1/4) • Async Task • Async Task란? - 비동기적 작업수행 (백그라운드 작업을 위한 헬퍼 클래스) - background작업을 위한 모든 일을 추상화 함으로 각각의 background작업을 객체 단위로 구현/관리 할 수 있게 구현해 주는 클래스 - background 작업시에콜백메서드를 통해 정해진 작업을 처리하면 되는데 , UI스레드에서 실행되는 콜백메서드를 내부적으로 작업스레드를 생성하면서 필요시에 호출해서 사용 IST (Information Sciences & Technology) Laboratory

  11. Async Task (2/4) • Async Task • Async Task 선언하는 예 params progress result Background 작업 시작 첫번째매개인자가 String 으로지정됨 콜백메서드인doInBackground(String){} 도 String으로 선언되어 작업에 사용할 데이터의 자료형으로 지정됨 첫번째매개인자가 Long 으로지정됨 콜백메서드인onPostExcute(Long result){} 도 Long형으로 지정되어 작업 결과를 표현할 데이터 자료형으로 지정됨 첫번째매개인자가 Integer 으로지정됨 콜백메서드인onProgressUpdate(Integer){} 도 Integer로 선언되어 작업 진행표시를 쉬해 사용할 데이터의 자료형으로 지정됨 IST (Information Sciences & Technology) Laboratory

  12. Async Task (2/4) • Async Task • Async Task 선언하는 예 • Async Task 동작 - doInBackground()메소드는작업스레드에서 자동적으로 실행됨 - onPreExcute(), onPostExcute(),onProgressUpdate() 모두 UI스레드에서 호출됨 - doInBackground()에 의해 반환 되는 값은 onPostExcute()에 전달됨 - UI스레드의onProgressUpdate()를 실행하도록 하기 위해 doInBackground()에서 언제든지 publishProgress()를 호출 할 수 있음. - 어떤 스레드에서든 항상 그 태스크를 취소할 수 있음. params progress result Background 작업 시작 작업진행도 IST (Information Sciences & Technology) Laboratory

  13. 예제] 백분율 진행값 Click!

  14. 루퍼 백그라운드 작업 전에 호출 • 루퍼란? 백그라운드 작업 실행 백그라운드 작업 정지 Click! IST (Information Sciences & Technology) Laboratory ① ②

  15. 안드로이드 프로세스 자이고트 • 안드로이드프로세스 : 액티비티가 실행되기 위해서는 프로세스라는 실행 공간이 필요 • 프로세스 상태 계층 구조 안드로이드 프로세스 명 Foreground process Visible process Service process Background process Empty process 우선순위 높음 우선순위 낮음 IST (Information Sciences & Technology) Laboratory

  16. 안드로이드 프로세스 자이고트 • 안드로이드 프로세스 • 프로세스 상태 계층 구조 Foreground process 사용자가 제일먼저 접할 수 있는 스크린의 최상위에 있는 Activity. 최상위 프로세스는 우선순위가 가장 높고 중요한 반면 매우 적은 수가 존재 하며 제일 마지막에 소거된다. 활성화 상태에 있는 Activity는 foreground에 있으면 사용자 이벤트에 반용하며, onStart(), onCreate, onDestory() 이벤트에 실행되는 서비스가 이에 속함. Visible process 사용자의 화면상에는 나타나지만 foreground상태는 아닌 Activity를 점유하는 프로세스. 예를 들면 foreground activity 다이얼로그 형태로 그 뒤에 이전에 보여졌던 activity를 허용하면서 표시되는 것을 말함. 더 이상 수행하지 않을 때까지 종료되지 않으며 모든 foreground프로세스들을 실행상태로 유지된다. Background process 사용자에게는현재 보여지지 않으며 Activity를 가지고 있으며 시작된 서비스를 가지지 않는 프로세스. 사용자에게 어떤것도 직접적으로 영향을 미치지 않으며 오로지 activity 생명주기를 정확하게 구현하기 위해 마련된 것 Empty process 어떤 활성화된 애플리케이션 컴포넌트도 점유하지 않는 프로세스. 다음번네 해당 애플리케이션을 실행할 필요가 있을 때 시동시간을 개선하기 위한 캐쉬로써 사용됨 IST (Information Sciences & Technology) Laboratory

  17. 안드로이드 프로세스 자이고트(1/7) • 안드로이드 프로세스 • AtivityManager.RunningTaskInfo클래스 android.app패키지에 있으면서 현재 프로세스에 실행되는 상태를 알려줌 액티비티 컴포넌트의 실행상타, 오류, 메모리 등을 관리하는 클래스 액티비티의running 상태 작업 정보를 검색해서 그 결과값을 가진 클래스 IST (Information Sciences & Technology) Laboratory

  18. ^^ • 루퍼란? // 최근3개의 액티비티를 검색 실행되는 taskID 현재 상태에 대한 개요 작업 Activity로드 Running상태 Avtivity로드 태스크 작업 스택의 최상위 Activity를 리턴 Running.java 추가해주어야 한다! AndroidManifest.xml

  19. 안드로이드 프로세스 자이고트(3/7) • 자이고트 • 안드로이드 실행 단위인 컴포넌트는 실행 전에는 안드로이드 애플리케이션 파일(apk)내에 존재하지만, 실행 시점에서는 프로세스 내에 적재되며 자이고트란 특수한 프로세스를 포크(fork)하면서 프로세스를 생성한 후 해당프로세스 내에 컴포넌트를 적재한다. IST (Information Sciences & Technology) Laboratory

  20. 안드로이드액티비티 등의 컴포넌트들을 사용하여 개발자 코드를 작성 후 실행하면 dex파일로 변환후 Shared form Zygote에 의해 Zygote에 적재된다. 자이고트프로세스는 안드로이드 내에서 생성한 자바 코드를 실행 모듈로 변환한 뒤 적재된 프로세스들을 실행시킨다. 액티비티에서 표현되는 Map,Browser,Home등 을 실행시에자이고트에 적재되는 화면

  21. 안드로이드 프로세스 자이고트(5/7) • DDMS를 통한 자이고트 흐름 확인 - UpdateThread main스레드가 제일먼저 생성됨 * : 데몬스레드 (백그라운드에서 실행됨) 자이고트는ZygoteInit.main() → AvtivityThread.main()을 거치면서 애플리키이션의 main스레드를 완성한 후 실행 시키는 단계를 거치게 됨 안드로이드의 프로세스에 의해 실행되는 흐름을 볼 수 있으며 여러가지 구현 내용도 함께 분석할 수 있음 IST (Information Sciences & Technology) Laboratory

  22. 안드로이드 프로세스 자이고트(6/7) • 프로세스 오류정보 IST (Information Sciences & Technology) Laboratory

  23. 안드로이드 프로세스 자이고트(7/7) • 프로세스 오류정보 • 로그캣의 기록방법 IST (Information Sciences & Technology) Laboratory

  24. END 감사합니다 임지희 ambomis@kunsan.ac.kr

More Related