2011-12-08 3 views
0

버튼을 클릭하여 2 개의 활동을 종료하려고합니다. 현재 활동 및 이전 활동. 그들의 pid 사용. 나는 단지 하나의 활동을 죽일 수있다. 왜 이런 일이 생길까요? 현재 활동이 살해 가져 오지 반면 2 개의 활동을 동시에 종료 할 수 없습니다. 그게 왜?

public void onClick(View v) { 

       android.os.Process.killProcess(pidofmain); 
       android.os.Process.killProcess(android.os.Process.myPid()); 

       } 

내 로그 캣에서 볼 경우

는, PID "pidofmain"로 활동 살해지고 있습니다.

"pidofmain"은 인 텐트를 사용하여 이전 활동에서받은 정수입니다.

+1

왜 자신의 앱을 죽이려고합니까? 'finish()'메소드를 들여다 보았습니까? – Phil

답변

0

OS에 프로세스 종료. 이것은 시분할 OS의 모든 종류의 프로그램에 좋지 않습니다. 메모리를 절약하고 싶다면 OS가 처리하도록하십시오. 또한 프로세스가 제대로 죽었는지 알 수 없지만 알 수없는 경우 프로세스가 올바르게 종료되었는지 여부를 알 수 없습니다. 그렇지 않으면 프로세스를 수행하지 않아도됩니다. 무엇을 원하십니까?

0

더 좋은 방법은 finish()으로 현재 활동을 호출하는 것입니다. startActivityForResult(Intent)을 사용하여 현재 활동을 호출하면 이전 활동을 알리면 완료 될 수 있습니다. 현재 활동은 finish()을 호출하기 전에 setResult(int)으로 전화하여 이전 활동으로 리턴 코드를 다시 보냅니다. 이전 활동은 리턴 코드를 onActivityResult(int, int, Intent)으로 테스트 할 수 있으며 결과 코드에 따라 finish()을 호출 할 수도 있습니다.

킬링 프로세스는 OS에 맡겨야합니다. 활동이 끝나면 자원이 필요하면 활동이 종료됩니다. 그렇지 않으면 앱이 돌아 다니기 때문에 사용자가 앱을 다시 실행하고 싶을 때 앱을 다시 시작할 수 있습니다.

0

이것은 명확한 대답은 아니지만 필자가 가지고있는 생각과 비슷하지만 Eclipse를 실행하고 프로토 타입을 작성하기에는 너무 늦었다. 도움이되지 않으면 내일 알려야 겠어.
1) Android 앱은 실제로 단일 스레드이며, 주 활동으로 모든 디스패치 이벤트 (내가 만든 두 번째 스레드라고 가정하는 이벤트 포함)를 제어합니다. . 주 활동을 중단하면 응용 프로그램이 처음으로 android.os.Process.killProcess(pidofmain)을 호출 한 다음 실행을 종료하고 전체 응용 프로그램을 종료 했으므로 두 번째 호출을 수행하지 않을 것입니다. 다시 말하지만 이것은 변수 이름 pidofmain에 의해 메인 UI 스레드를 죽이고 main이라는 액티비티 만 죽이는 것이 아니라고 가정합니다.
2) 나는 당신이 pidofmain을 얻은 곳에 대해서 조금 궁금해합니다. 3 가지 활동이 모두있는 것처럼 들리며 첫 번째 활동에서 프로세스 ID를 가져 와서 인 텐트 번들의 두 번째 활동으로 보내면 세 번째 활동 (즉, 시도하고있는 곳)으로 전달됩니다. 이 모든 일을 죽이려고?) 이 경우, 현재 실행중인 활동을 종료하려고 시도하는 중이라면 여기에있는 문서의 표는 동일한 방법으로 재개 된 상태의 활동을 종료 할 수 없다고 생각하게합니다. Official Android Docs for Activity 현재 실행중인 작업에 finish() 메서드를 호출 해 볼 수 있습니다.

logcat에서 정확히 무엇을 볼 수 있습니까? 그리고 UI는 어떻게됩니까? 보이는 활동이 계속 실행 되나 다른 활동이 뒷받침에서 제거 되었습니까?

관련 문제