2018-10-12 안드로이드 발표 2009011044 정 연 호
차례 6-2 일정 시간 후에 실행하기 6-3 스레드로 메시지 전송하기 6-4 AsyncTask 사용하기 자유 주제 2018-10-12 차례 6-2 일정 시간 후에 실행하기 6-3 스레드로 메시지 전송하기 6-4 AsyncTask 사용하기 자유 주제
2018-10-12 6-2 일정 시간 후에 실행하기 말 그대로 메인 스레드 내에서 지연시간을 주어 동작하도록 하는 것
예제 #1 (MainActivity.java) 2018-10-12 예제 #1 (MainActivity.java) 대화상자를 만들어 화면에 보여줌 대화상자에서 [예] 버튼을 누르면 10초동안 대기한 후 텍스트뷰에 완료 표시
이것을 해결하려면 핸들러의 특정 메소드를 이용하여 일정 시간 후에 실행되도록 만들면 된다. 2018-10-12 이것을 해결하려면 핸들러의 특정 메소드를 이용하여 일정 시간 후에 실행되도록 만들면 된다. sendMessageAtTime 이 메소드는 메시지를 보낼 때 시간을 지정할 수 있다. sendMessageDelayed 메시지가 일정 시간이 지난 후 실행되도록 설정할 수 있다.
예제 #1 (MainActivity.java) - 수정 2018-10-12 예제 #1 (MainActivity.java) - 수정
6-3 스레드로 메시지 전송하기 여기서 알아보고자 하는 내용은 메인 스레드에서 별도의 스레드로 메시지를 2018-10-12 6-3 스레드로 메시지 전송하기 여기서 알아보고자 하는 내용은 메인 스레드에서 별도의 스레드로 메시지를 전달하는 방법에 대해 알아 봅시다.
루퍼를 이용한 메시지처리 구조 핸들러(Handler) 루퍼 (Looper) 스레드(Thread) 메시지 큐 2018-10-12 루퍼를 이용한 메시지처리 구조 메시지 큐 (Message Queue) 스레드(Thread) 루퍼 (Looper) 핸들러(Handler) 무한루프 방식을 이용해 메시지 큐에 들어오는 메시지를 지속적으로 보면서 하나씩 처리
예제 #2 (activity_main.xml) 2018-10-12 예제 #2 (activity_main.xml) 입력에 필요한 TextView 정의 출력에 필요한 TextView 정의 Click 버튼 정의
예제 #2 (MainActivity.java) 2018-10-12 예제 #2 (MainActivity.java) 루퍼 사용 새로운 스레드를 위한 핸들러 스레드 내의 핸들러에서 메인 스레드의 핸들러로 메시지 전송 메인 스레드의 핸들러 내에서 입력상자에 메시지 표시
6-4 AsyncTask 사용하기 Async – 비동기화 Sync – 동기화 2018-10-12 UI 환경에서는 오래 걸리는 작업을 Sync로 수행하면 사용자의 UI 이벤트를 처리할 수 없다. 그래서 안드로이드에서는 Async방식을 이용한다. 하지만 초보자들이 핸들러와 스레드를 사용하는 것은 구현하기도 어렵고 이해하기도 어렵기 때문에 만들어진 것이 바로 AsyncTask 이다. 즉, AsyncTask = Handler + Thread
onProgressUpdate doInBackground 2018-10-12 AsyncTask가 실행되는 방식 execute 메인 스레드 신규 스레드 onPreExecute onProgressUpdate doInBackground onPostExecute
AsyncTask 클래스의 주요 메소드 doInBackground onPreExecute onProgressUpdate 2018-10-12 AsyncTask 클래스의 주요 메소드 doInBackground 새로 만든 스레드에서 백그라운드 작업을 수행. Execute() 메소드를 호출할 때 사용된 파라미터를 배열로 전달받음. onPreExecute 백그라운드 작업을 수행하기 전에 호출. 메인스레드에서 실행되며 초기화 작업에 사용됨. onProgressUpdate 백그라운드 작업의 진행상태를 표시하기 위해 호출. 이 메소드가 호출되도록 하려면 백그라운드 중간에 publishProgress() 메소드를 호출해야 함. onPostExecute 백그라운드 작업이 끝난 후에 호출. 메인 스레드에서 실행되며 메모리 리소스를 해제하는 작업에 사용됨. 백그라운드 작업의 결과는 Result 타입의 파라미터로 전달
예제 #3 (activity_main.xml) 2018-10-12 예제 #3 (activity_main.xml) Progress바 정의 Execute 버튼 정의 Cancel 버튼 정의
예제 #3 (MainActivity.java) 2018-10-12 예제 #3 (MainActivity.java) Progress바와 textview의 상태 변경 정상적으로 마치면 finished, 취소 눌렀을 때는 Cancelled 메시지 출력 Progress바는 0으로 초기화 AsyncTask를 상속하고 새로운 BackgroundTask 클래스 정의 <입력 변수, 진행상태, 실행 결과> 중간중간 Progress바 업데이트를 위해 publishProgress 메소드 호출
2018-10-12 자유 주제 이 프로그램은 버튼 2개와 그림을 보여주는 이미지뷰로 구성되어 있고, 그림은 따로 그림파일을 가지고 하는 것이 아니라 인터넷에 있는 그림파일 주소를 지정하여 버튼을 클릭하면 서버 연결 중이라는 대화상자를 띄우고 갖고 오도록 했다.
2018-10-12 실행 화면