2010-12-04 3 views
12

Android Service을 설명하십시오. Activity과 어떻게 다른가요? 그것은 전경/배경에서 실행되는 것과 같은 응용 프로그램 상태에 의존합니까?Android 서비스

답변

28

을 확인 읽기 Android Developer's SDK reference for Service :

서비스가 사용자와 상호 작용하지 않으면 서 더 긴 실행 작업을 수행하거나 응용 프로그램의 욕망을 나타내는 응용 프로그램 구성 요소입니다 또는 다른 응용 프로그램이 사용할 수있는 기능을 제공 할 수 있습니다.

주의하는 것이 매우 중요합니다

그들의 호스팅 프로세스의 메인 쓰레드에서 실행되는 다른 응용 프로그램 객체 등의 서비스. 즉, 서비스가 CPU 집중적 인 작업 (예 : MP3 재생) 또는 차단 (예 : 네트워킹) 작업을 수행하는 경우 해당 작업을 수행 할 자체 스레드를 생성해야합니다.

최상의 사용자가 직접보고와 상호 작용하는 무언가로 이해 활동에 대조적이다 (a UI.) 전술 한 바와 같이

서비스는 더 이상 실행 작업에 사용될 수있는 포 그라운드 활동이 없어도 계속 진행되지만 "배경"상태 인 경우 안드로이드의 수명주기에 의해 결국 죽을 수 있습니다. 서비스가 중지되고 다시 시작되지 않고 단일 인스턴스로 계속 실행되어야하는 경우 서비스 onCreatestartForeground(int id, Notification notification)을 입력하고 서비스 onDestroy 방법으로 stopForeground(boolean removeNotification)을 입력하는 것이 좋습니다.

예를 들어, 나는 야간에 가속도계 데이터를 기록하기 위해 foreground Service을 사용하는 앱을 가지고 있으며, 안드로이드 기기는 사용자의 신체 옆에 있습니다. 이 활성화 될 필요는 없습니다 만, 나는 또한 그것은 또한 Activity 내부 BroadcastReceiver에 엑스트라로 가속도계 데이터로 Intent을 방송해야한다는 Service을 알려주는 Service 내부 BroadcastReceiverIntent 방송 Activity 있습니다.

코드 : SleepActivity SleepAccelerometerService

행운을 당신이 더 이상 정보가 필요하면 알려주세요!

+1

두 번째 링크 "SleepAccelerometerService"가 고장났습니다. – gonzobrains

+0

잠자기 상태가 되어도 서비스를 계속 실행하려면 WakeLock을 사용해야합니까? – gonzobrains

+0

장기 실행 및 CPU 집약적 인 작업을 수행 할 때마다 서비스가 기본적으로 실행되어 UI 스레드에서 실행되므로 새 스레드에서 서비스 코드를 실행하려고 할 수 있습니다. 대부분의 요구에 IntentService를 사용할 수 있습니다. HandlerThread 및 ThreadPoolExecutor는보다 유연하지만보다 복잡한 대안입니다. –