2012-04-30 3 views
2

웹 서버에서 데이터를 가져와이 데이터를 목록보기에 넣은 다음 사용자에게 제공하는 응용 프로그램이 있습니다. 다음과 같이 호출 할 수 있습니다 포함 4 개 활동이 있습니다의도를 통해 첫 번째 활동으로 돌아 가면 활동 스택은 어떻게됩니까?

A는 -> B -> C -> D

또는

A -> B -> D

기본적으로 모든 A를 제외한 활동이 웹에서 데이터를 가져옵니다. 연결에 문제가있어 시간이 초과되었습니다. B, C, D 액티비티가 사용자에게 알리고 A로 돌아 가기를 원합니다.

그래서 지금 내가 한 일은 다음과 같습니다. 모드 singleTask를 시작하십시오. 이 방법을 사용하면 타임 아웃 예외를 발견하고 A를 시작하는 새로운 의도를 호출 할 수 있습니다. 그러나 그 사이의 활동은 어떻게됩니까? A-> B-> C-> D를 호출 한 다음 D에서 연결 시간을 초과한다고 가정 해 봅시다. 이제 앱이 A로 돌아가지만 B와 C는 어떨까요? 안드로이드가 자동으로 onDestroy를 호출합니까? 액티비티 스택은 어떻게됩니까? 어떤 힌트도 감사하겠습니다.

건배

답변

2

당신이 시작하면 활동 A는, 활동 D에서, 의도 플래그 설정 :을 가져, 당신이있는 A와 활동 사이의 모든 활동을 취소합니다이 플래그를 사용

FLAG_ACTIVITY_CLEAR_TOP 

을 앞에. 아마도 단일 모드를 실행 모드로 사용할 필요는 없습니다.

+0

이것은 내가 찾고있는 것입니다. 정말 고마워요! – Viciouss

+0

내 기쁨, 당신이 원하는 경우 대답을 수락하십시오 :) – ootinii

1

내가 A-> B-> C-> D를 호출하고 D에서 연결 시간을 초과한다고 가정 해 봅시다. 모든 자식 활동에 startActivityForResult()와 활동 B로 시작하는 경우 이제 응용 프로그램이 다시 것입니다 ... 당신의 예와

, & 구현 C :

finishFromChild(Activity activity) { 
    ... 
    finish(); 
} 

때 활동 D 통화 finish()가 끝나면 각 자식이 순서대로 닫힙니다 (D -> C -> B -> A).

+0

finishFromChild() 메서드를 사용하면 작은 문제가 있습니다. D에서 finish()가 호출 되 자마자 C로 돌아가서 onResume()을 호출합니다. 이것은 웹 데이터를 가져 오기 위해이 메서드에서 스레드를 만들 때 방지하려고합니다. 데이터가 오히려 빨리 변경 될 수 있기 때문에 현재 애플리케이션에 캐싱이 없습니다. 그래서 내가 원하는 것은 C와 B를 건너 뛰고 A로 바로 돌아가고 B와 C에 어떤 일이 일어나 든 상관 없습니다. 내가 알고 싶은 유일한 것은 내가 단일 태스크 호출을 통해 백그라운드에서 일어나는 일입니다. 지금 당장 했어. – Viciouss

관련 문제