2013-04-19 4 views
0

서비스 충돌 문제는 Android에서 자주 발생하며 충돌이 발생하면 서비스가 자동으로 다시 시작됩니다.Android 서비스 충돌 문제

저는 부팅시 실행되는 3 개의 서비스 (A, B, C)와 하나의 서비스 (A)가 다른 두 서비스 (B와 C)를 시작합니다. 그래서 내 질문은 하나의 서비스가 충돌 한 다음 다른 두 서비스가 동시에 충돌 할 경우 영향이있을 것인가?

서비스를 테스트 할 때 내 서비스 A가 충돌하고 다른 두 서비스가 충돌하고 20 % 시간이 지나면 한 번에 하나의 서비스 (A/B/C) 만 중단됩니다.

이 서비스가 작동을 멈추었을 때 올바른 동작은 무엇입니까?

+0

'충돌'이라고 말하면 오류가있는 것처럼 또는 서비스가 중지되었다는 것을 의미합니까? 오류가 발생하면 logcat 출력을 게시하십시오. – Tom

+0

일반적으로 오래 실행 한 후 메모리가 부족하면 Android 서비스가 중단되고 자동으로 다시 시작됩니다 ... 내 서비스가 오류로 중단되지 않습니다 ... 장치 메모리가 부족하여 메모리를 회수하지 못하면 충돌이 발생합니다 – user2291470

+0

설명서에 따르면 서비스는 종종 작업을 수행하고 작업이 완료되면 스스로 중지합니다. 어쩌면 당신은 당신의 서비스가 성취하고자하는 것을 바라보고, 그들이 일을 마쳤기 때문에 스스로 멈추는 지 알아봐야 할 것입니다. 또한 왜 메모리가 부족 해지는 지 살펴보십시오. 또한 서비스 A가 파괴 되더라도 서비스 B와 C는 계속 진행될 수 있습니다. – Tom

답변

1

안드로이드 OS가 메모리 부족 상태 일 때 메모리에 백그라운드로있는 것을 닫으면 시작됩니다. 이것은 정의 된 동작입니다.

당신은 "START_STICKY"와 같은 다시 메모리를 가질 때 OS가 서비스를 다시 시작합니다 이런 식으로 (이런 일이되지 않을 수도 있습니다) 서비스를 시작합니다 : How to force a service restart?

:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.i("LocalService", "Received start id " + startId + ": " + intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 

이 자세한 답변보기를

그리고 당신은 여기에 서비스에 대한 자세한 내용을보실 수 있습니다 : 이 http://developer.android.com/reference/android/app/Service.html

0

"내 질문은 하나 개의 서비스가 충돌하는 경우 동시에 두 개의 다른 서비스에 영향을 미칠 것인가? "

아니요, 그렇지 않습니다.

"부팅시 실행되는 세 가지 서비스 (A, B, C)와 다른 두 서비스 (B 및 C)를 시작하는 서비스 (A)가 있습니다."

아무 문제가 없지만 부트 업시 모든 서비스를 독립적으로 시작하는 것이 좋습니다. 왜? 그렇지 않으면 서비스간에 불필요한 집계가 줄어들 기 때문입니다.

"이 서비스가 작동을 멈추었을 때 올바른 동작은 무엇입니까?"

시스템은 자신의 의지로 메모리를 청구하는 서비스를 중단합니다.

서비스가 종료 될 수있는 "올바른"또는 고정 된 순서는 없습니다. 누가 더 많은 메모리를 확보했는지, 덜 중요한 일을하는지에 따라 다릅니다.