2012-07-14 3 views
0

나는 이며, 이는 Android Manifest에서 singleTopandroid.intent.action.MAIN으로 선언되었습니다. 런처에서 시작한 다음 다른 활동을 실행하십시오 부터 Intent까지 차례로 누른 다음 홈 버튼을 누르십시오. 이제 작업 스택이 "A, B"대기중인 작업이 있습니다. 그런 다음 다시 실행을 시작하면 런처에서 이미 스택이 복원 된 인스턴스가 다시 실행됩니다 (액티비티 B 전경에서 실행).발사대와 같은 방법으로 활동을 시작 하시겠습니까?

이것은 좋은 것입니다. 그리고 저는 A을 내 자신의 Notification에서 시작할 때 동일한 효과를 얻고 싶습니다. 나는 Intent 플래그의 다른 조합을 시도했지만 활동의 새 인스턴스가 이거나 같은 인스턴스이지만 스택이 해제되었습니다 (전이중 활성 없음 B).

답변

0

우선, 오랫동안 그 작업을 사용하지 않을 때 시스템이 활동 B를 죽이지 않도록하십시오.

사용자가 장기간 작업을 떠날 경우 시스템은 루트 활동을 제외한 모든 활동의 작업을 지 웁니다. 사용자가 태스크로 다시 돌아 오면 루트 활동 만 복원됩니다. 시간이 지나면 사용자는 이전에 수행 한 작업을 포기하고 새로운 작업을 시작하기 위해 작업으로 복귀하기 때문에 시스템은 이러한 방식으로 작동합니다. 이 속성 태스크의 루트 액티비티에 "true"로 설정되어있는 경우, 방금 설명한 기본 동작이 발생하지 않습니다

alwaysRetainTaskState :

어떤 활동이이 동작을 수정하는 데 사용할 수있는 속성이 있습니다. 이 태스크는 오랜 기간이 지난 후에도 스택의 모든 활동을 유지합니다. 따라서해야 할 일은 A에 대한 매니페스트 파일의 <activity> 태그 아래에서이 값을 true로 설정하는 것입니다.

두 번째로 singleTop은 필요하지 않습니다. Android 문서의 figure을 확인하십시오. 나는 이것이 당신이 원하는 것이라고 생각합니다. singleTask 실행 모드를 지정하는 활동을 시작하면 해당 활동의 인스턴스가 i 그라운드 타스크에 존재하면 그 전체 타스크가 포 그라운드로 이동됩니다. 이 시점에서 백 스택에는 스택의 맨 위에 앞으로 가져온 작업의 모든 활동이 포함됩니다.

singleTop 대신 A 및 B 태그 아래에 singleTask을 추가해야합니다. 그런 다음 플래그없이 FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_REORDER_TO_FRONT (선택 사항)을 제외한 알림에서 활동 A를 시작해야합니다.

본인 스스로 시도하지는 않았지만 효과가 있다는 강한 믿음이 있습니다. 시도해보고 그렇지 않은 경우 알려주십시오.

관련 문제