태그 보관물: multithreading

multithreading

안드로이드의 Asynctask vs Thread 위해 별도의을 사용했습니다 Thread. 그러나 다른

UI에서 백그라운드 작업을 수행하기 위해 별도의을 사용했습니다 Thread. 그러나 다른 사람들이 제안한대로 지금은을 사용하고 AsyncTask있습니다.

a Thread와 a의 주요 차이점은 무엇입니까 AsyncTask?

어떤 시나리오에서 a Thread또는 AsyncTask?를 사용해야 합니까?



답변

장시간 실행되거나 CPU를 많이 사용하는 작업의 경우 기본적으로 Java 스레드와 Android의 기본 AsyncTask의 두 가지 방법이 있습니다.

둘 중 하나가 반드시 다른 것보다 낫지는 않지만 각 호출을 언제 사용해야하는지 아는 것은 시스템 성능을 귀하의 이익으로 활용하는 데 필수적입니다.

다음에 AsyncTask를 사용하십시오.

  1. 많은 데이터를 다운로드 할 필요가없는 간단한 네트워크 작업
  2. 몇 밀리 초 이상 걸릴 수있는 디스크 바운드 작업

다음에 Java 스레드를 사용하십시오.

  1. 중간 또는 많은 양의 데이터가 포함 된 네트워크 작업 (업로드 또는 다운로드)
  2. 백그라운드에서 실행해야하는 높은 CPU 작업
  3. GUI 스레드와 관련된 CPU 사용량을 제어하려는 모든 작업

그리고 인터넷을 통해 도움이 될만한 많은 좋은 자료가 있습니다.

http://www.vogella.com/articles/AndroidBackgroundProcessing/article.html


답변

Java 스레드를 사용하는 경우 고유 코드에서 다음 요구 사항을 처리해야합니다.

사용자 인터페이스에 결과를 다시 게시하면 기본 스레드와 동기화

스레드를 취소하기위한 기본값이 없습니다.

기본 스레드 풀링 없음

Android에서 구성 변경을 처리하기위한 기본값이 없습니다.


답변

  • 일반적으로 긴 작업
  • thread.start () 메소드에 의해 호출
  • 모든 스레드 에서 트리거
  • 자체 스레드 에서 실행
  • 수동 스레드 관리 / 코드를 읽기 어려울 수 있습니다

비동기 작업

  • 메인 스레드와 통신해야하는 작은 작업
  • excute () 메소드로 호출
  • 메인 스레드 에서 트리거
  • 작업자 스레드에서 실행
  • 메인 스레드에서 실행하고 생성해야합니다

답변

스레드는 동시 실행 단위입니다. 자체 호출 스택이 있습니다. 응용 프로그램에서 스레드를 구현하는 방법에는 두 가지가 있습니다.

하나는 Thread를 확장하고 run () 메소드를 재정의하는 새로운 클래스를 제공하는 것입니다. 다른 하나는 생성하는 동안 Runnable 객체를 사용하여 새 Thread 인스턴스를 제공하는 것입니다. “start”메소드를 호출하여 스레드를 실행할 수 있습니다. “setPriority (int)”메소드를 호출하여 스레드의 “우선 순위”를 설정할 수 있습니다.

UI 부분에 영향을 미치지 않으면 스레드를 사용할 수 있습니다. 예를 들어, 일부 웹 서비스를 호출하거나 일부 데이터를 다운로드하고 있으며 다운로드 후 화면에 표시합니다. 그런 다음 스레드와 함께 처리기를 사용해야하며 스레드의 모든 응답을 처리하기 위해 응용 프로그램을 복잡하게 만듭니다.

핸들러를 사용하면 스레드의 MessageQueue와 관련된 Message 및 Runnable 객체를 보내고 처리 할 수 ​​있습니다. 각 스레드에는 각 메시지 큐가 있습니다. (할 일 목록처럼) 스레드는 각 메시지를 가져 와서 메시지 큐가 비워 질 때까지 처리합니다. 따라서 Handler가 통신 할 때 호출자 스레드에 메시지를 제공하기 만하면 처리를 기다립니다.

Java 스레드를 사용하는 경우 고유 코드에서 다음 요구 사항을 처리해야합니다.

사용자 인터페이스에 결과를 다시 게시 할 경우 기본 스레드와 동기화 스레드를 취소하기위한 기본값 없음 기본 스레드 풀링 없음 Android에서 구성 변경 사항을 처리하기위한 기본값 없음

비동기 작업

AsyncTask를 사용하면 UI 스레드를 적절하고 쉽게 사용할 수 있습니다. 이 클래스를 사용하면 스레드 및 / 또는 핸들러를 조작하지 않고도 UI 스레드에서 백그라운드 작업을 수행하고 결과를 게시 할 수 있습니다. 비동기 작업은 백그라운드 스레드에서 실행되고 결과가 UI 스레드에 게시되는 계산에 의해 정의됩니다.

AsyncTask는 다음 4 단계를 거칩니다.

onPreExecute ()

작업이 실행되기 전에 UI 스레드에서 호출

doInbackground (파라 마 ..)

onPreExecute () 실행이 완료된 직후 백그라운드 스레드에서 호출됩니다.

onProgressUpdate (진행 ..)

publishProgress (Progress …)를 호출 한 후 UI 스레드에서 호출됩니다.

onPostExecute (결과)

백그라운드 계산이 완료된 후 UI 스레드에서 호출됩니다.

왜 AsyncTask를 사용해야합니까?

UI 스레드에 사용하기 쉽습니다. 따라서 호출자 스레드가 UI 스레드 인 경우 사용하십시오.

핸들러를 조작 할 필요가 없습니다.

자세한 내용은 여기를 방문하십시오


답변

실:

Thread성능을 향상 시키려면 장기 실행 조작을 기본 스레드에서 분리하는 데 사용해야합니다. 그러나 우아하게 취소 할 수 없으며 Android의 구성 변경을 처리 할 수 ​​없습니다. 에서 UI를 업데이트 할 수 없습니다 Thread.

AsyncTask5ms보다 짧은 작업 항목을 처리하는 데 사용할 수 있습니다. 를 사용하면 AsyncTaskjava와 달리 UI를 업데이트 할 수 있습니다 Thread. 그러나 많은 장기 실행 작업이 성능을 방해합니다.

둘 다에 대한 대안이 더 적습니다.

HandlerThread / 핸들러ThreadPoolExecutor

자세한 내용은 아래 게시물을 참조하십시오.

처리기 대 AsyncTask 대 스레드


답변