2012-11-23 4 views
2

로 이동 한 후 같은 의도를 recceives 나는 다음과 같은 구조를 가지고 :안드로이드 활동이 두 번 내 응용 프로그램에서 배경

활동 A는 스택에서 자신을 제거, 활동 B, 및 완료를 호출; B 액티비티는 수행 할 액션을 지정하는 액티비티 A의 인 텐트를받습니다. 이러한 액션이 수행되면 사용자는 B 액티비티에있는 여전히 메시지를 보게됩니다. 사용자가 홈 버튼을 누르면 앱이 백그라운드로 이동하고, "onPause"을 호출 한 다음 "onStop"을 호출하십시오. 모든 것이 예상대로 작동합니다.

사용자가 몇 시간 동안 백그라운드에서 앱을 종료하고 몇 시간 후 앱을 다시 열려고 시도하면 해당 활동과 동일한 의도로 활동 B의 onCreate 메서드가 호출됩니다. 활동 A. 일부 시간 전받은

내가 원하는 무엇

이었다 (사용자가 몇 분 후 응용 프로그램을 다시가는 경우, 그가 떠날 때 B 그냥 좋아하는 활동을 볼 것)이이 경우에 내 앱은 사용자가 떠났을 때 화면에 있던 메시지를 사용하여 활동 B 및 활동 B가 아니라 활동 A를 엽니 다.

애플 리케이션이 OS에 의해 죽고있는 것으로 보입니다.이 모든 것이 의미가 있습니다. 실제로 이해가 안가는 것은 액티비티 B가 onCreate 메소드 및 이전과 같은 목적으로 열리는 이유입니다.

답변

1

ActivityB 상태를 기록하려면 onSaveInstanceState()을 사용하십시오. 안드로이드는 프로세스를 죽이기 전에 이것을 호출합니다. 사용자가 응용 프로그램으로 돌아 오면 프로세스를 다시 만든 다음 활동 스택 맨 위에있는 활동 (사용자의 경우 ActivityB)을 다시 작성합니다. 이 작업을 수행하면 저장된 인스턴스 상태가 onCreate() 호출의 매개 변수로 활동에 전달됩니다. ActivityB가 프로세스 종료/재시작 후에 다시 작성되고 있음을 알 수 있도록 무언가를 넣을 수 있어야합니다. 이 경우 ActivityB는 사용자에게 메시지 (다시 onSaveInstanceState() 메서드로 저장해야 함)를 표시하거나 사용자를 다시 ActivityA로 리디렉션하여 다시 시작할 수 있습니다.

+0

이것이 내가 구현 한 해결책이었고, 괜찮 았어. – paulo

1

이것은 활동주기에 설명 된 예상되는 동작입니다.

활동이 시작될 때 항상 Intent 오브젝트를 수신합니다. 당신의 활동 B를 시작하는 데 사용 된 의도는 당신의 활동이 죽었을 때 OS에 의해 보존되었고, 활동이 "살아"돌아 왔을 때 재전송됩니다.

귀하의 활동은 상태를 보존하고 필요에 따라 복원됩니다. 귀하의 문제 설명에 따라 onStop()을 사용하도록 권하고 있으므로 SharedPreferences 활동 상태 및 메시지에 저장하고 onResume()을 다시 읽으십시오. onDestroy()에서 새로운 청소주기가 시작되도록 환경 설정을 지워야합니다.

감사합니다.

1

같은 문제가 발생했는데, 그렇게 할 수있는 방법이나 권한이 있는지 모르겠지만 필요한 경우에만 Intent 엑스트라를 변경했습니다.

그래서 원하는대로받지 못해서 작업이 수행되지 않습니다.

+0

이것은 주제와 관련이 없으며 이해할 수 없습니다. – Ixx

관련 문제