2013-02-20 5 views
4

내 응용 프로그램에는 서비스가 거의 없습니다. 응용 프로그램이 "android.uid.system"프로세스에서 실행 중입니다. 내가 클릭하면 다음 기록 "강제 종료"를 말한다 :android "force close"정확히 메모리에서 일어나는 일

강제로 중지 패키지 com.sec.ims.android UID = 1000 강제 정지 서비스가 ServiceRecord {42b9a948 ... .....

내가 볼 내 응용 프로그램에서 실행되는 각 서비스에 대해 onDestroy() 호출이 전혀 없습니다. 정확히 안드로이드가 "강제 종료"이후에 무엇을하고 있는지 궁금합니다. 전체 프로세스를 중지하거나 모든 서비스를 중지하고 응용 프로그램에서 작동하는 활동은?

개체, 정적 변수 및 해당 서비스에서 생성 한 스레드에 어떤 일이 발생했는지 알고 있습니까? 안드로이드는이 응용 프로그램의 모든 메모리 힙을 지우나요?

답변

1

강제 중지는 응용 프로그램이 실행중인 VM (가상 컴퓨터)을 종료합니다. 모든 개체, 서비스 및 활동이 종료됩니다.

1

서비스를 시작한 방법에 따라 다릅니다.

startService()을 사용하면 bindService()으로 관리되는 기본 서비스 수명 시간을 덮어 씁니다.

startService()을 사용하면 원래 활동이 닫힐 때 서비스 수명주기가 유지됩니다.

두 경우 모두 Android가 메모리가 필요할 때 서비스를 중지합니다.

0

라고 생각합니다. 이 문제는 메모리 킬러 실행 문제가 적습니다. Android PF는 heigher 우선 프로세스에 heap이 필요할 때 프로세스를 종료합니다.

[PS]

  • 당신이 목적에 메모리 부족 킬러 상황을 만드는 경우. 내 응용 프로그램을 사용하는 것이 좋습니다. http://kyorohiro.blogspot.jp/2013/02/inside-kyorostress-1-produce-low-memory.html

  • 이 문제가 메모리 부족 인 경우 서비스 및 프로세스가 다시 시작됩니다. 하지만 응용 프로그램의 데이터는 Java 힙에서 지워집니다.

  • PF가 프로세스를 다시 시작하는 경우. 그런 다음 onCreate()를 호출하십시오.

  • 서비스 수명주기가 onStartCommand의 반환 값에 의해 변경됩니다. 안드로이드 API를 참조하십시오.