내가, BACK을 눌러 다음 때마다 간단한 안녕하세요 응용 프로그램Android에서 종료 한 후 응용 프로그램과 해당 자원이 메모리에 저장되는 이유는 무엇입니까? 나는이 여러 번 실행하면
public class TestLeaksOnFinish extends Activity
{
static int ctr = 0;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView t = new TextView(this);
t.setText("Hello World! "+ctr++);
setContentView(t);
}
}
을 가지고, 나는 클릭률이 활동 후 BACK 완전히 살해되지 않음을 나타내는 각각의 시간을 증가 시킨다는 참조하십시오.
이는 BACK을 누른 후 DDMS에 HPROF 파일을 덤프하여 확인합니다.
이 파일에는 여전히 TestLeaksOnFinish 활동 클래스가 포함되어 있습니다.
BACK을 누른 후이 활동이 여전히 힙 덤프에있는 이유를 설명 할 수 있습니까? 내가 들어오는 참조를 나열 할 때
, 나는 안드로이드 활동에
뒤로 키를 누르면'finish()'가 호출되고 있습니까? 어쩌면 안드로이드는 응용 프로그램을 일시 중지하고 나중에 다시 시작합니다. 게다가 'ctr'은 정적 인 필드입니다. 누설로 유명합니다. –
정적 프리미티브가 액티비티를 누설하지 않습니다. – FunkTheMonk
@MichellBak finish()가 호출됩니다 (이는 onBackPressed()의 기본 구현이지만 확실하게 무시합니다). onPause 및 onDestroy도 호출됩니다. 또한 더 이상 정적이 아닌 ctr을 만들면 힙 덤프에서 동일한 데이터를 얻게됩니다. 앱을 여러 번 실행하면 ctr 자체가 항상 0으로 표시되어 매번 새로운 인스턴스가 만들어지고 (예상대로) 이전 인스턴스가 더 이상 사용되지 않으므로 메모리에 저장되는 이유가 궁금합니다. –