2012-02-07 7 views
5

START_STICKY을 사용하면 내 서비스가 작업 관리자에 의해 충돌/종료되면 자동으로 다시 시작됩니다. 재시작되지만 다른 순서로 서비스 목록이 있다는 것을 알았습니다. 이 서비스의 우선 순위를 지정하여 큐의 맨 앞에 배치하여 서비스가 더 빨리 시작되도록하고 싶습니다.크래시 된 안드로이드 서비스의 스케줄링 우선 순위 지정

일반적으로 서비스를 다시 시작하는 데 15 초에서 45 초가 걸립니다. 이 서비스를 다른 서비스보다 우선적으로 우선 순위를 지정하거나 시작할 수있는 방법이 있습니까?

답변

0

서비스가 오래 실행됩니까? 그렇다면 그것을 없애고 필요할 때만 시작하십시오. 안드로이드 서비스는 데몬으로 실행되는 것이 아니며 사용자 상호 작용과 인터페이스가 필요하지 않을 때 백그라운드에서 짧은 거주자로 운영 될 예정입니다.

"나는 방금 앉아있다"서비스의 대부분은 방송 의도를 듣고 이런 식으로 좋은 시민이 될 수 있습니다.

또 다른 한 가지 : 서비스가 이미 단기간에 실행되고 있고 작업 킬러가 활성화되어 있으면 쉽습니다. 사용자의 문제이며 사용자의 잘못이 아닙니다. 시스템에는 작업 킬러가 필요하지 않으므로 사용자를 돌보지 않아야합니다. 사용자는 사용하기에 건강하지 않다는 것을 알아야합니다.

+0

광산은 "다른 것"입니다. 내 작업 관리자 무시 목록에 내 애플 리케이션을 추가하는 메시지를 추가해야한다고 생각합니다. – dcanh121

0

이 솔루션은 약간 더러운 것 같지만, START_STICKY으로 시작하고 다른 모든 서비스를 START_NOT_STICKY으로 설정하는 새 서비스를 사용할 수 있습니다.

그런 다음 새 서비스를 사용하여 다른 모든 서비스를 시작할 수 있습니다 (반드시 필요한 것은 아니지만). 시작될 서비스에 전체 의도를 전달할 수 있으므로 실제로는 쉽게 구현할 수 있습니다.

그러면 모든 서비스의 OnDestroy()에 브로드 캐스트를 추가하여 새 서비스에 이전 서비스 중 하나가 시스템에 의해 종료되었음을 알릴 수 있습니다. OnDestroy()을 통해 이전 시작 의도를 전달할 수 있으므로 다시 시작됩니다.

새 서비스가 종료되는 경우 다른 서비스가 종료 된 경우 다시 시작한 후 다시 확인한 다음 다시 시작할 수 있습니다.