2011-11-16 4 views
0
으로 돌아갑니다

부모 활동과 다른 애플리케이션에서 인 텐트 필터 (예 : ACTION_VIEW)를 통해 호출 할 수있는 것보다 많은 활동이 있습니다.android finish()는

내 활동 내에서 finish()를 호출하면 올바른 발신자에게 반환하는 방법은 무엇입니까?

예 : 다른 응용 프로그램 -> 내 활동 -> 마무리() -> 다른 응용 프로그램

내 주요 활동은 여전히 ​​실행중인 경우가 호출되었지만

현재, 마무리(), 내 주요 활동으로 돌아갑니다 다른 응용 프로그램에서.

+0

괜찮 았어. gmail 앱에서 내 활동을 호출하면 내 활동이 끝나면 Gmail 앱으로 돌아갑니다. 드롭 박스 앱으로 호출하면 내 활동이 끝나면 내 주요 활동으로 돌아갑니다. – oceanpriest

+0

및 내 주요 활동의 onActivityResult조차하지 않았다. 내 기본 활동이 실행중인 경우 – oceanpriest

답변

0

다른 작업 (/ 응용 프로그램)에서 활동을 호출하면 다른 작업 (원하지 않는 다른 활동 포함)이 포어 그라운드로 이동하게됩니다. . 다른 응용 프로그램에서 시작할 수있는 활동의 android:taskAffinity을 지정하는 것이 좋습니다. 이렇게하면이 활동이 작업의 유일한 활동이 될 것이므로 자신의 앱 내에서 시작되는지 또는 다른 활동에서 시작되는지는 중요하지 않습니다.

편집 : 작업 링크의 그림 4는 사용자의 상황을 보여줍니다.

+0

링크를 제공해 주셔서 감사합니다. 내 응용 프로그램은 파일 (ACTION_VIEW, ACTION_SHARE)을 처리하기위한 몇 가지 인 텐트 필터를 가지고있다. 처리 과정이 끝나면 finish()를 호출하기 만하면됩니다. VIEW 작업을 통한 Gmail 앱의 경우 제대로 돌아올 것입니다. VIEW 작업을 통한 다른 앱의 경우 호출 앱으로 돌아 가지 않습니다. SHARE 작업을 통한 다른 앱의 경우 올바르게 반환됩니다. – oceanpriest

0

하위 작업을 호출하려면 startactivityforresult()를 사용하십시오. 당신은 좋은 사람으로 돌아갈 것입니다.

1

startActivityForResult(Intent)으로 하나의 활동을 시작하면 getCallingActivity()으로 첫 번째 활동을 시작한 두 번째 활동을 가져올 수 있습니다.

+0

입니다. 내 주요 활동이 발신자라고 가정했습니다. 원래 발신자는 실제로 ACTION_VIEW 의도를 통해 내 활동을 호출 한 다른 앱 (예 : Gmail, 드롭 박스)입니다. 내 주요 활동 대신 gmail/dropbox로 돌아 오는 방법. – oceanpriest

+0

질문을 다시 한번 말하자면 시작 활동에서 다른 활동을 시작한 활동을 얻는 방법. 적어도 그것이 가능하다면, 의도적으로 그러한 정보를 추출 할 수는 없습니다. –

1

활동에 finish 메소드를 호출하면 히스토리 스택의 맨 위에있는 활동으로 리턴됩니다. 기본적으로 액세스 한 이전 활동입니다. 예를 들어

:

홈페이지> A> B

마무리가 활동 B에 호출하면, 마무리가 활동 (A)에 호출 될 경우 당신은 활동 A. 로 돌아갑니다 만, 활동 B는 여전히 살아있다 , 당신은 히스토리 스택의 맨 위 활동이기 때문에 활동 B에 머무를 것입니다. 활동 B에서 finish가 호출되었지만 어떤 이유로 활동 A가 내역 스택에 없습니다 (대부분의 경우 활동 A를 내역 스택에 저장하면 안 됨). 활동 대신 Activity Main으로 돌아갑니다 B.

+0

역사 스택에 대해 더 자세히 설명해 주시겠습니까? 스택의 내용을 디버깅하는 방법은 무엇입니까? 내 애플 리케이션 또는 글로벌 로컬 스택 무엇입니까? – oceanpriest

+0

기록 스택에는 이전에 액세스 한 모든 활동이 포함됩니다. 새로운 액티비티를 시작하면 히스토리 스택에 푸시됩니다. 마찬가지로, 작업이 끝나면 히스토리 스택에서 파생됩니다. 내 생각에 안드로이드 API 11에는 안드로이드가 이미 스택 조작을위한 내장 지원 기능을 가지고 있다고 생각한다.한 응용 프로그램에서 다른 응용 프로그램으로의 활동을 아직 시도하지 않았기 때문에 스택이 응용 프로그램의 로컬인지 확실하지 않습니다. – Arci