2014-07-15 5 views
0

저는 이전에 알지 못했던 Android 서비스의 독특한 동작을 발견했으며 목적이 무엇인지 이해하고 싶습니다. 문서화를 거친 후 이것이 예상 된 동작이지만이 설계의 이유를 이해할 수 없음을 확인할 수 있습니다.Android 서비스 동작 이해

서비스는 StopSelf() 때까지 백그라운드에서 무기한 계속 실행 호출 또는 안드로이드 시스템은 부족으로 인해 메모리를 파괴한다. 즉, 서비스가 OnstartCommand() 메소드 실행을 완료 한 후 실행중인 서비스 페이지에 계속 표시됩니다.

이 동작의 목적을 이해하지 못합니까? 나는 그 서비스가 일단 그 OnStartCommand이 실행되면 멈춰야한다고 믿는다. 왜 계속해서 백그라운드에서 실행해야하는지 (또는 올바른 문구라면 메모리에 남아 있어야합니다). 처음부터 메모리에 서비스를 작성하는 오버 헤드 대신 서비스를 시작하려는 새로운 의도가 더 빨리 제공 될 수 있기 때문입니다.

답변

1

Android는 주변 물건을 유지하는 경향이 있습니다. 앱이 종료되고 마지막 활동이 파괴 된 후에도 Linux 프로세스는 Android가 메모리를 필요로 할 때까지 살아남습니다.

The official documentation은 서비스를 잘 처리합니다. 서비스를 실행하는 두 가지 방법에주의를 기울이십시오. 나는 책들이 서비스를 잘 다루지 않는다는 것이 이상하다는 것을 알았다. O'Reilly의 "Programming Android"책은 페이지의 3 분의 1만을 제공합니다! 알아야 할 중요한 사실은 활동이 Android의 유일한 일류 시민은 아니라는 것입니다. 서비스가 중요합니다. 논리적으로 단일 활동의 라이프 사이클에 포함되지 않은 "할 일"을 원할 때마다 서비스가 사용하는 것이 옳습니다.

1

또한 프로세스 간 통신을 위해 서비스를 바인딩 할 수도 있습니다. IntentService는 Queue를 사용하여 말합니다. 한 번에 하나의 인 텐트를 제공하고 서비스가 완료되면 자동으로 서비스를 중지합니다. Vogella에는 서비스 사용 방법과 서비스 시작 방법의 차이점에 대한 멋진 개요가 있습니다.