2010-03-17 5 views
7

내 액티비티 스택이 상당히 깊어 질 때까지 여러 액티비티를 탐색 할 수 있습니다.여러 개의 Android 액티비티를 동시에 닫으십시오.

메인 메뉴로 곧바로 돌아갈 수있는 버튼이 모든 활동에 표시됩니다. 즉, 첫 번째 메뉴를 제외한 모든 활동을 스택에서 팝합니다.

버튼을 뷰에 넣으면 애플리케이션의 모든 액티비티를 쉽게 넣을 수 있지만 여러 액티비티를 닫는 방법을 알아낼 수는 없습니다.

(.보기 자체적으로 닫 얼마나 많은 활동 해결할 수 있다면 가능하다면, 그것은 좋은 것 - 즉, 자신의 활동이 스택에 얼마나 깊은 감지)

답변

16

는 의도 플래그에서보세요 FLAG_ACTIVITY_CLEAR_TOP은 대상 활동을 스택 맨 위에 가져오고 그 위에 있던 다른 모든 것을 제거합니다. 따라서 모든 활동에 추가 할 수있는 버튼을 사용하여 기본 메뉴를 타겟팅하는 인 텐트를 시작하고 해당 플래그가 설정됩니다. 문서에서

:

설정하면, 그리고 시작 인 활동은 이미 다른 모든 활동, 즉 활동의 새로운 인스턴스를 시작 대신 다음의 현재 작업에서 실행 여기에 이 닫히고이 인 텐트가 새로운 의도로 이전 활동 (맨 위에있는 )으로 전달됩니다.

예를 들어, 활동 구성된 태스크 고려 : D는 활성 B의 성분 로 확인 의도 startActivity를()를 호출하는 경우 A, B, C는 D. 다음, C 및 D는 것 완료와 B가 될 것은 스택 지금 존재의 결과로, 는 의도 주어진 수신 :하는 B.

을 위의 예에서 활동 B의 현재 실행중인 인스턴스 는 다음 중 하나를 당신이 시작되는 새로운 의도를받을 onNewIntent() 여기에 메소드가 종료되거나 자체적으로 완료되고 이 새 인 텐트로 다시 시작됩니다. 이 실행 모드를 "multiple"(기본값)로 선언했으며 이 에 FLAG_ACTIVITY_SINGLE_TOP을 설정하지 않았 으면 이 완료되고 다시 생성됩니다. 다른 모든 실행 모드의 경우 또는 FLAG_ACTIVITY_SINGLE_TOP이 설정된 경우 이 인 텐트는 현재 인스턴스의 onNewIntent() 으로 전달됩니다.

이 발사 모드도 FLAG_ACTIVITY_NEW_TASK와 함께 좋은 효과를 사용할 수 있습니다

: 태스크의 루트 액티비티를 시작 에 사용하는 경우, 그것은 는 전경에 해당 작업의 현재 실행중인 인스턴스를 가져올 것이다 그런 다음 루트 상태로 지 웁니다. 예를 들어, 알림 알림에서 활동을 시작할 때 특히 유용합니다 ( ).

+0

할 것입니다. 그냥 처음부터 완전히 옳았는지 확인하고 싶습니다. 전에 그 중 하나에 찔려 보았습니다. – teedyay

+1

실제로 - 이것이 나에게 바람직한 영향을주었습니다 : intent.SetFlags (ActivityFlags.ClearTop | ActivityFlags.SingleTop); – scolestock

-1

첫 번째 활동을 android:launchMode="singleTask" (more)으로 선언하고 인 텐트로 시작할 수 있습니다.

편집 : 내 제안은 활동의 단일 인스턴스를 반환하려는 것으로 가정합니다. 그렇지 않으면 잘못된 것입니다.

+1

여기서 singleTask의 사용을 제안하면 singleTask의 기능을 이해하지 못했음을 알 수 있습니다. 그게 괜찮아요, 혼란스럽고 활동의 행동에 많은 영향을줍니다. 그래서 당신이 이해하지 못하고 당신에게하는 모든 것을 원한다면, 그것을 피하십시오. 99 %의 앱은 정상 모드 또는 때로는 싱글 탑 모드 만 사용해야합니다. – hackbod

관련 문제