2011-03-07 2 views
1

백그라운드 스레드가 작동하는 방식을 이해하려고합니다. 내 활동에서 배경 스레드를 호출 오전 및이 활동뿐만 아니라 내 스레드 처리기를 구현합니다. 배경 스레드가 실행되는 동안 사용자가 작업 b로 이동한다고 가정 해 보겠습니다. 백그라운드 스레드가 작업을 마치면 어떻게됩니까? 응용 프로그램의 모든 단일 활동에 처리기를 구현해야합니까? 아니면 작업 a의 처리기가 자동으로 호출되어 사용자에게 작업을 지시합니까?안드로이드에서 처리기 및 스레드

답변

1

Handler의 javadoc는 말한다 :

Each Handler instance is associated with a single thread and that thread's 
message queue. 

당신이 당신의 핸들러를 만든 경우 모든 활동이 만들어 그들의 방법은 기본 응용 프로그램 스레드 (또한 EDT라고도 함)에서 호출이가 있기 때문에, 당신은을 통해 (핸들러를 호출 할 때 post() 또는 유사한 메소드)를 백그라운드 스레드에서 삭제하면 EDT에서 실행됩니다. 당신이 핸들러 (= 주 응용 프로그램 스레드를) 만든 곳

what happens when my background thread finishes its operation will i have to 
implement handlers in every single activity in the app or will the handler from 
activity a will be automatically invoked and will direct the user to activity a? 
  1. 백그라운드 스레드에서 당신의 실행 가능한 run() 방법보다 handler.post (실행 가능한)를 호출

    는 스레드에서 실행됩니다.
  2. 아니요, 사용자를 활동 A로 연결하거나 표시하지 않습니다. 액티비티 A에서 정의한 runnable.run() 메소드를 실행합니다.
1

일반적으로 UI 스레드를 onPreExecute()onPostExecute()으로 작업 할 수 있기 때문에 일반적으로 스레드에 AsyncTask를 사용하려고합니다.

관련 활동이 활성화되어 있지 않으면 너무 많이해서는 안됩니다. 이상적으로는 스레드를 onPause()에 멈추게 할 수 있습니다.

활동과는 다른 삶을 가져야하는 작업의 경우 Services을 권장합니다. 워드 프로세서에서 :

서비스는 와 사용자가 상호 작용하지 않으면 서 더 이상 실행 작업을 수행하거나 사용하는 다른 응용 프로그램 기능 를 제공하는 응용 프로그램의 욕망의 어느 쪽인지를 표현하는 응용 프로그램 구성 요소 입니다.

그런 다음 장기 실행 작업을 수행하는 동일한 서비스와 상호 작용하는 여러 활동을 가질 수 있습니다.

+0

응답 해 주셔서 감사합니다. 나는 현재 async 작업을 사용하여 webservice에서 데이터를 다운로드하고 db에 삽입합니다. 배경 스레드를 사용하는 이유는 사용자가 새로운 또는 업데이트 된 정보를 다운로드하는 동안 db의 데이터로 내 앱을 사용할 수 있기를 원하기 때문입니다. – user648929

+1

@ user648929 백그라운드에서 작업중인 서비스를 원하는 것처럼 들리므로 다운로드로 인해 발생하는 활동주기가 걱정되지 않아도됩니다. –