2011-09-07 2 views
1

응용 프로그램에서 매우 이상한 동작이 관찰되었습니다.프로세스 p = Runtime.getRuntime(). 응용 프로그램을 제거하더라도 exec()가 실행 중입니다.

내 응용 프로그램에 하나의 서비스와 하나의 활동이 있습니다. 응용 프로그램의 내 서비스 부분에서 장치의 SD 카드에 저장된 텍스트 파일에 출력을 덤프 할 LogCat 명령을 실행해야합니다. 위의 코드는 백그라운드에서 실행되고

Process p = Runtime.getRuntime().exec("logcat -v time -f /mnt/sdcard/log.txt &"); 

지금까지 나는 내가 원하는 것을 달성 :

나는 아래의 코드를 사용하고 내 서비스에서 로그 캣 명령을 실행하십시오.

위의 명령은 장치에서 응용 프로그램을 제거한 후에도 실행됩니다. SD 카드의 내 log.txt 파일이 계속 증가하고 있습니다.

"응용 프로그램 -> ManageApplications -> RunningServices"를 선택했지만 내 서비스가 실행되고 있지 않습니다.

내 응용 프로그램을 제거 할 때 내 백그라운드 프로세스를 중지하는 방법을 알려주십시오.

이 문제는 매우 이상하지만 일어납니다.

이러한 현상은 사라지고 장치를 재부팅했습니다.

답변

3

새 프로세스를 시작하므로 현재 프로세스와 전혀 관련이 없습니다. 앱이 죽으면 살해되지 않습니다. 나는 여기서 단 두 가지 옵션을 알고있다 : 1) logcat을 -d로 실행한다. (믿을 만하다.) 버퍼의 끝에 도달하면 종료 할 것이다. logcat은 기본적으로 닫힐 때까지 실행됩니다. 로그의 덤프를 원하면 -d를 사용해야합니다. 2) 덤프를 원하지 않지만 파일로 계속 스트리밍하려면 깔끔하게 정리할 수있는 방법이 없습니다. ps를 실행 한 다음 콘솔 버퍼를 읽고 logcat 프로세스의 PID를 찾은 다음 Process.killProcess를 사용하여 프로세스를 종료하는 방법을 알고있는 유일한 방법입니다.

0

Runtime에서 반환 한 프로세스를 기억하고 앱을 제거 할 때 종료 할 수 있습니다.

관련 문제