2013-06-20 2 views
0

여기에 대한 질문에 대한 답변을 when onDestroy is called으로하면 Android 문서의 불일치가있는 것으로 보입니다. 사용자는 '뒤로'버튼을 누르면라이프 사이클 메소드 및 뒤로 키 재검토

task and backstack

관한 로이드 문서에 따르면, "현재 활동은 스택의 상단 (활성이 파괴된다) 이전 활동으로부터 팝되고 (자사의 UI의 이전 상태가 복원) 다시 시작합니다. "

그러나 동시에, the android lifecycle 활동이 자동으로 파괴하지만, UI가 부분적으로 숨겨져있는 경우가 아니라 일시 정지하지 않는 것을 제안 중지 UI가 완전히 숨겨져 있고 시스템의 자원이 부족한 경우에만 파괴됩니다.

두 개의 반대 위치입니다. 그래서 내 질문은 - 그것은 무엇입니까?

@Raghunandan에게 의견을 남기고 잠시 나마 이리저리 외쳐 보라고 외칩니다. 바라기를 우리는 대답을 얻을 것이다.

답변

0

이 두 문에는 모순이 없습니다. 당신은 당신이 finish() 전화를 걸거나 finish을 무시하고 super.finish()를 호출하지 않는 이상한 일을하지 onBackPressed을 무시하지 않는 BACK 키를 누르면

onDestroy가 호출됩니다.

Activity.finish으로 전화를 중지하지 않으면 onDestroy이며 항상입니다.

다른 문은 BACK을 눌러 대해 아무것도 말하지 않는다 나는 당신이

것을 여기에서 제공 한 링크 아래 어디에도 찾을 수없고, 시스템 리소스가 부족한지 에만을 파괴 할 수 있습니다. onDestroy

Additinally은 응용 프로그램 리소스가 부족할 때 호출되는 (이상하게 내 휴대 전화에서 발생하지 않는, 나는 OOM를 얻을)이 때 (20 개) 기타 활동 전 세계적으로 (모든 응용 프로그램에서)라고이 일 후에 시작된다 .

또한 onDestroy이 호출되지 않기 때문에 yet another answer on when onDestroy is called을 다시 확인하도록 안내합니다.

+0

내가 연결 한 origninal 질문에서 유형에 대해 당신은 맞습니다. 그러나, destroy가 on을 누를 때마다 항상 자동으로 호출되면 onRestart 메소드가 필요 없습니다. 심지어 앱이 활성 상태에서 파괴 된 상태로만 진행되면 왜 라이프 사이클 방식을 사용하게 될까요? 당신이 말하는 것이 사실이라면 onCreate와 onDestroy라는 두 가지 필수적인 방법 만 있습니다. – Rarw

+0

@Rarw [Activity 라이프 사이클에 대한 추가 정보] (http://developer.android.com/training/basics/activity-lifecycle/starting.html#lifecycle-states)를 제안합니다. 화면이 꺼지거나 다른 투명한 '활동'이 앞에 올 때 활동이 일시 중지됩니다. HOME을 누르거나 다른 불투명 한'Activity'가 스택에 놓이면 활동이 멈 춥니 다. BACK 단추 만 사용하면 라이프 사이클 메서드를 호출 할 수있는 유일한 방법이 아닙니다. –

+0

나는 lifecycle 메서드를 호출하는 유일한 방법이라고 제안하지 않습니다. 예를 들어 전화를 받거나 화면 상단에서 메뉴를 가져 오는 등 여러 번 전화를받을 수 있다는 사실을 알고 있습니다. 그러나 나는 또한 back을 누를 때마다 onDestroy가 호출된다는 생각에 동의하지 않습니다. 뒤로 버튼을 누를 때 액티비티가 어떻게 작동하는지 살펴보십시오. 내가 집으로 돌아갈 경우 내 앱은 배경에서 계속 유지됩니다. 모든 활동이 언론의 보도로 즉시 파괴된다면, 이것은 사실이 아닙니다. 매번 onCreate에서 다시 시작해야합니다. – Rarw

1

둘 다 문맥 상 적합합니다. 어쩌면 수명주기가 "시스템에서 리소스가 부족하면 파괴됩니다. 또는 스택에서 갑자기 꺼내집니다"라고 말합니다.

예를 들어 이것을 고려하십시오. 당신은 활동가 시작, 다음에서 활동 B를 시작, 다음

  • B.

    에서 활동 C를 시작 이제 A와 B 모두 일시 정지 및 정지,하지만 파괴되지 않습니다.
  • C 리소스가 많으면 A 또는 B가 손상 될 수 있습니다.

지금 활동 C에서 뒤로 버튼을 누르면, 당신은

  • 활동 C가 일시 중지 활동 B에 돌아 중지 및 을 파괴했다.

이제 중지, 당신은 다시

  • 활동 B가 일시 정지 작업에 있으며, 버튼을 다시 돌아 가기 누른

시스템 때문에 모든 활동 인스턴스를 유지하려고 파괴 신속하게 다시 열 수 있습니다. 그러나 액티비티가 스택에서 팝되면 사용자가 나중에 동일한 인스턴스가 아닌 다른 액티비티를 다시 열 수있는 방법이 없습니다.