해당 서비스가있는 Android 앱 (활동)이 있습니다. 서비스는 활동에 의해 시작되며 활동이 중지 된 경우에도 계속 실행됩니다. 활동이 다시 시작되면 서비스에 Y 인드하여 u 리할 수 있습니다.힙 조각화로 인해 서비스 충돌이 발생하는 Android 활동
가끔씩 활동이 파괴되고 OS에 의해 생성됩니다. 이것은 일에 영향을주지 않아야하며, 활동은 다시 만들어 져서 서비스에 다시 바인딩 될 수 있어야합니다. 이것은 기본적으로 작동합니다. 나는 달빅 VM 힙과 네이티브 힙 모두 비 성형하고, 따라서 지속적으로 활동 할 때까지 크기가 증가 것으로 나타났습니다
그러나
는 ... 메모리와 충돌 (심지어 총 메모리 그래도 부족 사용량은 실제로 일정하며 누출되지 않음). 이것은 많은 할당이 생성 과정에서 이루어지기 때문에 활동을 파괴하고 재 작성함으로써 더욱 악화됩니다.
몇 가지 재시작 후 활동이 중단 될 것이라는 거의 확실한 경고입니다. 이것은별로 신경 쓰지 않지만, 같은 응용 프로그램의 일부이기 때문에 서비스도 중단됩니다. 서비스에는 크래시 중에 손실되는 중요한 데이터가 포함되어 있습니다.
이 문제를 해결하는 방법에 대한 제안이 있으십니까?
서비스를 활동에서 분리하는 방법 (활동이 충돌 할 때 서비스가 중단되지 않도록)이 서비스와 활동을 동일한 응용 프로그램에 계속 유지할 수 있습니까?
서비스 데이터를 유지할 수 있지만 DB에 많은 액세스가 필요하며 배터리 절약에 도움이되지 않습니다.
에있을 것입니다, 나는 실제로 unbindService를 호출 할(). 문제는 서비스가 여전히 실행 중이므로 (의도 된) 현재 힙이 활성 상태로 남아 있기 때문입니다. 활동이 재시작 될 때 서비스와 동일한 힙을 사용하는데, 이것은 현재 심각하게 단편화되어 있습니다. – chris
@chris - 귀하의 가설을 테스트하려면 서비스의 [android : process'] (http://developer.android.com/guide/topics/manifest/service-element.html#proc) 값을 지정하십시오. 명백한. 그러면 서비스가 앱의 활동과 별도의 프로세스에 배치됩니다. –