안드로이드 프로그래밍[JAVA Code]/Thread 5

Thread - AsyncTask

Thread 에서 핸들러를 사용해보면 코드가 조금 복잡해 보이는데, 안드로이드에서는 핸들러를 사용하지 않고 좀더 간단하게 작업하는 방법도 있다. AsyncTask 클래스를 상속하여 새로운 클래스를 만들면 그 안에 스레드를 위한 코드와 UI 접근 코드를 한꺼번에 넣을 수있다. 따라서 스레드로 처리 해야 하는 코드를 하나의 AsyncTask 클래스로 정의 할수 있다는 장점이 생긴다. 예를 들어, 웹서버에서 고객 이름을 가져오는 작업과 웹서버에서 제품이름을 가져오는 작업을 서로 다른 코드로 분리시키고 싶다면 두개의 AsyncTask 상속 클래스를 만든 후 각각의 코드를 넣으면 된다. AsyncTaks 객체를 만들고 execute() 메서드를 실행하면 이 객체는 정의된 백그라운드 작업을 수행하고 필요한 경우에 ..

Thread : 루퍼 를 이용한 message 보내기

핸들러 기능은 새로 만든 스레드에서 메인 스레드로 메시지를 전달하는 것이었습니다. 반대로 메인 스레드에서 별도의 새로만든 스레드에 메시지를 전달하는 방법이 필요 할때가 있다. 이를 위해 메인 스레드에서 변수를 선언 하고 별도의 스레드가 그값을 읽어가는 방법을 사용할 수도 있다. 하지만 별도의 스레드가 관리하는 동일한 객체를 여러 스레드가 접근할때는 별도의 스레드 안에 들어있는 메시지 큐를 이용해 순서대로 접근 하도록 만들어야 한다. 마치 메인스레드가 처리하는 것처럼 말이다. 루퍼는 메시지 큐에 들어오는 메시지를 지속적으로 보면서 하나씩 처리하게 된다. 메인 스레드는 UI 객체들을 처리하기 위해 메시지 큐와 루퍼를 사용한다. 그러나 별도의 스레드를 새로 만들었을 때는 루퍼가 없다 따라서 메인 스레드나 다른..

Thread : Runnable & post AlertDialog 박스

,핸들러를 사용해서 메시지를 보내면 조금 코드가 복잡하게 보이는 단점이 있어, 이보다 조금더 간단한 방법인 Runnable 객체를 실행 시키는 법에 대해 기술 해보겠다. 핸들러 클래스는 메시지 전송 방법 이외에 Runnable 객체를 실행 시킬수있는 방법을 제공 한다. 즉 Runnable 객체를 핸들러의 post() 메서드로 전달해주면 이 객체에 정의된 run()메서드 안의 코드들은 메인 스레드에서 실행 된다. 한마디로 별도의 핸들러 정의 할 필요 없이 Handler 객체 만들고, 만든 userThread 안에서 hander.post( new Runnable ) 하면 별도의 핸들러 없이 바로 메인 UI 접근이 가능하다. 1) hander.post( new Runnable )코드 public class M..

Thread : information

[안드로이드 스레드]에서 설명한 내용 중에서 메인 스레드와 관련된 내용을 간단히 정리해볼까요? 스레드란, 프로세스 내에서 "순차적으로 실행되는 실행 흐름"의 최소 단위를 말합니다. 프로그램의 main() 함수로부터 시작되는 최초 실행 흐름 또한 하나의 스레드이며, 이를 메인 스레드라고 부릅니다. 안드로이드 앱에서 메인 스레드는 메시지 큐(Message Queue) 수신을 대기하는 루프를 실행하며, 사용자 입력과 시스템 이벤트, 화면 그리기 등의 메시지가 수신되면 각 메시지에 매핑된 핸들러의 메서드를 실행합니다. 어떠한 경우에 스레드를 사용해야 하는지, 그 판단은, 구현하고자 하는 기능이 메인 스레드와 병행적으로(Concurrently) 실행되어야 하는가를 확인하는 것입니다. 이를 다르게 말하자면, 어떤 ..

Thread : 스레드 와 핸들러

새로운 프로젝트를 만들게 되면 메인 액티비티는 앱이 실행될 때 하나의 프로세스에서 처리된다. 따라서 이벤트 처리나 특정 메서드 기능 구현 할때도 같은 프로세스 안에서 실행된다. 같은 프로세스 안에서 일련의 순서대로 실행 될때, 대부분은 큰문제가 없지만, 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 화면에 보이는 UI도 멈춤 상태로 있게 되는 문제가 생길수 있다. 이런 문제를 해결하기 위해 하나의 프로세스 안에서 여러 개의 작업이 동시 수행되는 멀티 스레드 방식을 사용하게 된다. 스레드는 동시 수행이 가능한 작업 단위이다. 하지만 공통 메모리 소스를 나눠 쓰기 때문에 데드락이 발생하여 시스템이 비정상적으로 동작 가능 하다. 데드락이란, 동시에 두 곳 이상에서 요청이 생겼을 때 어떤 것을 먼..