2012-01-16 2 views
0

두 가지 활동이있는 응용 프로그램이 있습니다. A와 B로 시작합니다. A는 초기 활동이고 B는 두 번째 활동입니다. B가 시작되면 B가 외부 네트워크 연결을 설정하기 때문에 응용 프로그램이 실행을 중지 할 때까지 활동이 파괴되는 것을 원하지 않습니다.활동 유지 및 안드로이드에서 제대로 종료

내가 원하는 것은 사람들이 활동을 A에 입력하고 위젯을 누른 다음 B, 즉 A -> B로 이동하는 것입니다. 그들이 B의 뒤로 버튼을 누르면 B가 파괴되는 것을 원하지 않습니다. A가 다시 생성되었는지 여부는 상관하지 않지만 기본적으로는 아닙니다. 현재 활동이 A가되었습니다. 사람들이 B로 이동하기 위해 위젯을 누르면 열려있는 네트워크 연결로 기존 B 활동을 다시 입력하길 원합니다. 그들이 다시 물러 가면 나는 그들에게 A 활동을하기를 원한다. 이제 A에서 그들이 뒤로 물러 서면 응용 프로그램의 모든 활동을 닫고 싶습니다.

나는 A로 갈 때 B 액티비티가 파괴되지 않도록 B에서 onBackPressed() 메소드를 생성한다는 측면에서이 어딘가에있다. 또한 B를 호출하는 A의 의도에 "FLAG_ACTIVITY_REORDER_TO_FRONT"인 텐트 플래그를 추가하면 A에서 두 번째로 호출 할 때 B가 다시 작성되는 것을 방지하지만 이것이 최선의 방법은 아닐 수도 있습니다.

내가 무엇을 반복하려면 다음

  1. 는 활동 A.를 여는 B 다시 버튼을 활동 B.
  2. 보도를 여는 (A)에 활동 A.에서
  3. 을 눌러 위젯을 응용 프로그램이 입력이 안 B를 닫고 스택에 놓습니다.
  4. 다시 A. B에서 위젯을 누릅니다. 그러면 기존 B 작업이 열립니다.
  5. 이제 B에서 뒤로 눌러 A로 이동하십시오.
  6. A를 눌러 애플리케이션을 종료하십시오.

프로그램 흐름은 [홈 화면] -> 활동 A -> 활동 B입니다. 뒤로 키는이 흐름을 취소합니다.

답변

1

활동이 화면을 벗어날 때마다 OS에 의해 작동되지 않을 것이라고 보장 할 수있는 방법이 없습니다. 이것은 두 가지를 의미합니다. 당신이 지키고 자하는 시각적 상태는 당신 자신을 추적해야합니다. onSaveInstanceStateonRestoreInstanceState으로이 작업을 수행 할 수 있습니다.

화면에서 벗어날 수있는 활동에서 네트워크 연결을 열고 싶다고하셨습니다. Service에서이 작업을 고려해야합니다. 서비스는 화면에서 작동하도록 설계된 것을 제외하고는 활동과 매우 유사합니다. 그들은 사용자 상호 작용이 필요없는 무언가를하기에 좋습니다.

항상 두 가지 활동 사이에 뒤로 버튼 전환을하는 것과 관련하여 활동의 뒤로 버튼을 가로 채고 앱 전환 활동을 수행하면됩니다. 그러나 뒤로 버튼은 안드로이드에 매우 특정한 기능을 가지고 있으며 사용자는 특정 방식으로 행동하는 앱에 익숙하다는 것을 기억하십시오. 안드로이드 UX 규칙에도 불구하고 아무 것도하지 않도록 노력하십시오. 개인적으로 앱이 활동을 종료하고 홈 화면으로 돌아 가기 위해 뒤로 버튼을 사용하는 것과 같은 규칙을 어기면 실망합니다.

+0

네가 맞다. 화면 밖으로 나가면 생존하는 활동 객체에 의존 할 수 없으며 서비스 클래스는 네트워크 연결을 유지하는 것이 가장 좋습니다. 이것이 내가 한 일이며 지금까지 잘 진행되어 왔습니다. 감사. –

2

활동 B를 활성 상태로 유지하는 대신 네트워크 활동을 유지하기 위해 활동에 의존하지 않아야합니다. Service을 사용하고 사용자 정의 Application 클래스에서 연결을 관리하는 방법을 포함하여 여러 가지 방법으로이를 처리 할 수 ​​있습니다. 좀 더 자세한 정보를 얻으려면이 다른 게시물에 대한 내 대답을 참조하십시오. How to maintain Server Socket through Activities?