1 / 31

LifecareScienceLAB Android Seminar 5 th class

아주대학교. LifecareScienceLAB Android Seminar 5 th class. Android Software Development 2011/05/18 – p.m. 06:00 – 팔달관 409 호. Review. Option Database. JAVA 로 구현한 Option. 다음과 같은 순서로 동작한다 . 1. MENU 버튼을 누르면 액티비티의 onCreateOptionMenu 메서드로 메뉴를 생성하고 보여준다 . 2. 아에템을 선택하면 액티비티의

kele
Download Presentation

LifecareScienceLAB Android Seminar 5 th class

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. 아주대학교 LifecareScienceLABAndroid Seminar 5th class Android Software Development 2011/05/18 – p.m. 06:00 – 팔달관 409호

  2. Review • Option • Database

  3. JAVA로 구현한 Option • 다음과 같은 순서로 동작한다. • 1. MENU 버튼을 누르면 액티비티의onCreateOptionMenu메서드로메뉴를 생성하고 보여준다. • 2. 아에템을 선택하면 액티비티의 onOptionItemSelected 메서드로 기능을 수행한다. 1 2

  4. File I/O • 1. SDcard의 경로를 설정한다. • 2. 파일명을 설정한다. • 3. 파일을 연다. • FileOutputStreamopenFileOutput(String name, int mode) • FileInputStreamopenFileInput(String name) • 4. 작업을 한다. • read() • write() • 5. 파일을 닫는다. • close()

  5. File I/O • SD card의 상태 확인하기 • Environment.getExternalStorageState(); • MEDIA_MOUNTED, MEDIA_UNMOUNTED • 디렉터리 경로 생성 • File dir = new File([SD카드의 경로]+"/dir"); • dir.mkdir(); • 생성된 경로에 파일 생성 • File file = new File([SD카드의 경로]+"/dir/file.txt");

  6. File I/O Stream • 파일에 내용 쓰기 • FileOutputStreamfos = new FileOutputStream(file); • fos.write(저장할 문자열); • 파일로부터 내용 읽기 • FileInputStreamfis = new FileInputStream(file); • byte[] data = new byte[fis.available()]; • while (fis.read(data) != -1) {;} • 사용한 파일 닫기 • fis.close(); • fos.close();

  7. File I/O BufferedWriter • BufferedWriter사용 File root = Environment.getExternalStorageDirectory().getAbsoluteFile(); if(root.canWrite()){ File file = new File(root, [경로 + 이름]);W try { FileWriter writer = new FileWriter(file,true); BufferedWriter out = new BufferedWriter(writer); out.write([저장할 문자열]); out.close(); } catch (IOException e) { e.printStackTrace(); } }

  8. File I/O BufferedReader • BufferedReader사용 File root = Environment.getExternalStorageDirectory().getAbsoluteFile(); if(root.canRead()){ File file = new File(root, [경로 + 이름]); FileReader reader; try { reader = new FileReader(file); BufferedReader in = new BufferedReader(reader); String massage = in.readLine(); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }

  9. Contents List

  10. Thread ANdroid

  11. Thread???

  12. For Example • 프로그램이 하나의 작업(Task)를 처리하는 루틴(Routine), 흐름(flow) • Ex.1) 우리가 여태 구현한 프로그램들.. • 입력 값을 주면 처리 후 결과를 출력한다. • 입력 값이 들어오기 전에는 처리 작업이나 결과를 출력할 수 없다. • 일반 계산기와 별 다를 것이 없는 프로그램 • Ex.2) 우리가 오늘 배울 프로그래밍.. • 여러 개의 작업을 동시에 할 수 있다. • 입력을 기다리면서 처리 작업이나 결과를 출력할 수도 있다. • 대부분의 배포판App.에서 사용되는 프로그래밍

  13. Angry Birds? 파란 새가 날아가는 도중(처리) 경로나 움직임 등을 보여주며(결과) 터치 하게 되면 파란 새가 3마리로 분할한다.(입력) • 이 모든 작업을 동시에 하고 있다.

  14. Thread Classification Ex. kernel Level Computer Network Multi Processor Time Division Multiplexing T1 T2 T1 T2 T1 T2 … Task Result

  15. Thread Classification Ex. User Level Multi Process Multi Thread Linux Thread

  16. Thread • Thread는 프로그램을 하나의 흐름으로 보는 방식이다. • Multi Thread는 물줄기를 갈라놓듯 여러 개의 흐름을 만드는 것이다. • 외부적으로는 동시성을 충족시킨다. • 내부적으로는 시분할을 사용한다.

  17. Task or Thread Virtual CPU OS or Library Task Task Task Task Task Task CPU CPU CPU CPU CPU CPU Stack Stack Stack Stack Stack Stack Virtual Computer OS Process Process Process Hardware Computer

  18. Android Threads • 자바 스레드를 생성하는 두 가지 방법 • Thread() • 디폴트 생성자로Thread 객체를 생성 • 독립적으로 실행되는 실행 흐름 • 메인 스레드와는 별도로 CPU 시간을 할당 받아 실행 • run() 메서드는진입점이면서 메인 메서드 • Thread(Runnable r) • Runnable 인터페이스 구현 객체를 생성한 후 전달 • Runnable은 run() 메서드를 갖는 아주 간단한 인터페이스

  19. Thread()

  20. Thread(Runnable r)

  21. 프로그램 개념도 Activity Thread BackThread or BackRunnable Is Button Clicked? BackValue++ Wait 1000 Mili Second MainValue++ Display to Layout

  22. 실행 결과 • MainValue는 버튼을 클릭할 때만 1씩 증가 • BackValue는 1초당 1씩 증가 • 하지만 버튼을 누르지 않아도 BackValue가 증가하는 것을 보고 싶다면???

  23. Thread로 UI 제어하기 • 위의 프로젝트에 Thread 또는 Runnable 클래스의 run() 메서드를 다음과 같이 바꿔보자.

  24. 실행 결과 헉 ㅡ______ㅡ;;;

  25. 프로그램이 죽은 이유 Activity Thread BackThread or BackRunnable Is Button Clicked? UI 접근 BackValue++ Display to Layout Wait 1000 Mili Second MainValue++ Display to Layout 거절 UI는 Activity에서 제어 가능 하다. 두 스레드에서의 제어로 동기화 문제 발생 방지

  26. Handler • Handler Class • 스레드간에 메시지나 러너블 객체를 통해 메시지를 주고 받는 장치 • 핸들러는 항상 하나의 스레드와 관련을 맺어 자신을 생성한 스레드에 부착 • 메시지 큐를 통해 다른 스레드와 통신 • 메시지를 수신하는 메서드 • public void handleMessage(Message msg) • 메시지를 송출하는 메서드 • booleansendEmptyMessage(int what) • booleansendMessage(Message msg) • booleansendMessageAtFrontOfQueue(Message msg) • 인수로 사용되는 메시지(Message) 클래스의 필드 • int what : 메시지의의미 • int arg1 : 추가정보 1 • intarg2 : 추가정보 2 • Object obj : 정수 외의 추가정보 • Messenger replyTo : 메시지에 대한 응답을 받을 객체

  27. Handler사용하기 • BackThead나 BackRunnable의 run() 메서드를 다음과 같이 수정하고 Handler()를 정의해보자.

  28. 실행 결과 • MainValue는 버튼을 클릭할 때만 1씩 증가 • BackValue는 1초당 1씩 증가 • 버튼을 누르지 않아도 BackValue값이 주기적으로 바뀌는 것을 확인할 수 있다 ^___^v

  29. 그 외 주기적인 작업 방법 • 스레드와 같이 병렬처리는 아니지만 Timer를 이용해서 일정 시간마다 특정 메서드를 실행 할 수 있다. • 1. Handler Class의 sendEmptyMessageDelayed(), sendMessageDelayed()메서드를 재귀적으로 호출하여 일정 시간마다 특정 작업을 수행할 수 있다. • 2. Activity Class의 CountDownTimer() 메서드를 사용하면 총 실행시간과 주기를 함께 설정하여 일정 시간마다 특정 작업을 수행할 수 있다. • 3. AlarmManager Class를 이용하여 Android OS 에 스케줄 작업을 추가할 수 있다. (프로그램과 완벽히 독립)

  30. Team Presentation Software Development

  31. Team Presentation • 구현 2주차 • 서승환/이영권 :: 신장 측정 • 이기영/최성원 :: 위치기반 위험 상황 인지 • 구현 1주차 • 김영식/임동진 :: OpenCV를 이용한 점자인식 • 설계 • 권만석/정선홍 :: 실내 조도 측정 • 서우람/유영욱 :: 행동기반 위험 상황 인지 • 주제선정 및 분석 • 김유성/김재호

More Related