2011-12-20 7 views
1

활동 A는 의도로 활동 B를 시작하고 추가로 데이터를 전달합니다. 그런 다음 메모리 문제로 인해 프로세스이 시스템에서 종료됩니다. 그런 다음 내 앱이 어떤 의미로 포 그라운드로 이동했으며, 액티비티 A가 매니페스트의 실행 활동이라고 가정하고 마지막 액티비티 였기 때문에 액티비티 B를 가져옵니다 (아마도 A를 먼저 가져옵니다).android : 활동이 종료되면 다시 시작됩니다.

활동 B가 표시되면 onCreate()에서 원래의 의도에 액세스 할 수 있습니까? 아니면 시스템이 내 활동을 다시 시작했는지 알 수있는 방법이 있습니까? 활동이 죽였다면

답변

0

이 - 당신이 활동 A를 얻을 것이다 -. 난 당신이 텐트 필터 만 하나 개의 활동이 당신의 maifest 파일에 가정 <category android:name="android.intent.category.LAUNCHER" />

+0

나는 시스템이 내 프로세스를 죽인다는 의미였습니다. 이 상황이 발생하면 내가 알고있는 것부터 시스템이 프로세스의 마지막 활동을 다시 가져옵니다. –

+0

수동으로 프로세스를 종료하여이를 확인할 수 있습니다 - 환경 설정 - 응용 프로그램 - 응용 프로그램 정보에서 버튼 강제 중지가 있습니다. – Jin35

+0

감사합니다. 강제 종료로 프로세스를 수동으로 종료하면 응용 프로그램이 시작됩니다. 그러나 메모리를 절약하기 위해 시스템이 프로세스를 종료 한 다음 마지막으로 표시되는 앱 활동을 되돌릴 수 있다고 읽었습니다. –

0

는 "그런 시스템이 있기 때문에 메모리 문제와 다시 시작의 내 프로세스를 종료 그럼 복원 B라는 마지막 활동. "

이것은 잘못되었으므로 질문에서 제거해야합니다.

시스템이 메모리를 필요로하고 활동의 프로세스를 종료하면 다시 복원하지 않습니다. 다시 시작할 수 있지만 매니페스트에 정의 된 실행 의도가있는 활동 (또는 브로드 캐스트 수신기, 알람 관리자 또는 알림)에서 시작됩니다. (시스템 메모리를 필요로했기 때문에) 활동은 활동 스택에서 제거 된 경우

, 당신은 그것을 다시 원래의 호출 의도에 액세스 할 :

나는 같은 질문을 이해합니다.

이렇게 해석하면 대답이 '아니오'라는 것을 쉽게 알 수 있습니다. 살해 된 활동을 다시 시작하는 유일한 방법은 새로운 의도를 사용하는 것이므로 이전 의도는 자연히 사용할 수 없습니다.

하지만

당신이 살해 된 활동의 인스턴스에서 데이터에 액세스하려면

, 당신은 OnSaveInstanceState에 저장해야합니다. 다음에 활동이 시작될 때 저장된 상태가 OnCreate 메소드에 제공됩니다.

Process Lifecycle 참조 : 3. 그 사용 배경 활동

를 원래 호출 의도를 저장하고 작업을 다시 그것을 사용할 수 있습니다. 나는이 일을하기 전에 매우 조심스럽게 사용자 경험에 대한이 효과를 고려할 것이다.

+0

내 게시물을 편집했습니다. 따라서 활동 B가 가능한 모든 수단을 통해 나타날 수 있습니다. 저는 사람들이 B가 마지막 활동이 올 수 있고 적절하게 초기화되지 않았기 때문에 B를 확신한다고 확신한다고 읽으므로 이것을 가져오고 있습니다. 또한 Activity가 소멸 될 때 OnSaveInstanceState가 항상 호출되는지는 확실하지 않습니다. –

관련 문제