2012-10-01 7 views
0

여기 내 문제가 있습니다 : 내 응용 프로그램에 여러 활동이 있는데 그 중 두 가지는 약간 "특별한"활동입니다. 활동 A는 다른 유형의 활동을 시작하는 데 사용되는 활동 유형의 활동입니다. 또한 백그라운드에서 업데이트 할 수있는 다른 정보도 있습니다 (onNewIntent 사용). 매니페스트에서 나는 그것을 singleTop으로 선언했습니다. 결과에 대한 다른 활동을 시작하므로 singleTask 또는 인스턴스가 될 수 없습니다 (startActivityForResult가 이들과 작동하지 않음). 활동 B는 독립 실행 형 활동이며 특정 이벤트에서 실행되며 singleTop으로 선언됩니다. 또한 결과에 대한 다른 활동을 시작하고 onNewIntent도 사용합니다. 해당 활동에 링크 된 2 개의 별도 알림이 있습니다. 내가 모두활동 간 전환을위한 의도가 내 두 번째 활동을 죽입니다. 활동

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

을 위해 사용하고 일반적인 흐름은 다음과 같습니다

  1. A는
  2. 뭔가를 실행하는 일이 - 사용자가 홈 버튼을 누를 때 B가 나는 두 개의 알림이
  3. 을 시작됩니다 A와 B

문제 : 사용자가 notifi를 누르면 A의 양이온이, A가 출시되어 있지만, B의 새로운 B에 대한 해당 사용자 프레스 통지 이후에 시작되는 경우 B는 을 (플래그를 clear_top으로 인해) 살해 (활동은 죽었다, 하지만 이전 인스턴스 필요)

I을 이 기사를 읽었습니다. http://developer.android.com/guide/components/tasks-and-back-stack.html FLAG_ACTIVITY_NEW_TASK는 작업을 별도의 작업으로 시작해야하며 FLAG_ACTIVITY_CLEAR_TOP은이 경우 B를 죽여서는 안됩니다.

해결 방법은 논리를 다시 작성하고 단일 태스크로 만들고 onNewIntent에서 다른 활동의 결과를 처리하는 것이지만 다른 솔루션이 가능한 경우이 방법을 사용하지 않는 것이 좋습니다. 또한 B를 시작

FLAG_ACTIVITY_REORDER_TO_FRONT | FLAG_ACTIVITY_SINGLE_TOP 

FLAG_ACTIVITY_MULTIPLE_TASK | FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP 

을했지만, 어느 작품했습니다.

+0

구현이 잘못되었으므로 백 스택에서 제거 된 활동의 인스턴스는 보관하지 않아야합니다. 모든 실행시 활동 상태를 저장하고 상태를 다시 작성할 수 있어야합니다. –

+0

나는 당신에게 동의하지만,이 경우에는 옵션이 아니다. 나에게 이것은 상속 된 코드이며 활동 자체는 많은 정보와 상태를 보유하고있다 (나는 그것이 정확하지 않다는 것을 안다. 나는 그것을 리팩토링하고 일부 관리자들 대부분의 비즈니스 로직을 움직이려고 노력했으나 아직 많이 남아있다). 이 경우 singleton Activity와 같은 것이 필요하지만 singleInstance를 사용하지 않아야합니다. – Glatzial

+0

"정보"데이터가 비즈니스 로직 인 경우, 싱글 톤 클래스로 이동하십시오. MVC 패턴을 해킹하고 있습니다. –

답변

0

내 문제는 두 가지 작업이 모두 동일한 작업에서 실행된다는 것입니다. FLAG_ACTIVITY_NEW_TASK 문서는 새 작업에서 활동을 시작하지 않지만 puts합니다. 특정 활동에 대한 매니페스트에서 android : taskAffinity를 사용하고 고유 한 값으로 설정해야합니다. 그래야만 새로운 작업에서 시작될 것입니다. 그런 식으로 FLAG_ACTIVITY_CLEAR_TOP을 A에 사용하면 B가 삭제되지 않습니다.