Android singleTask 또는 singleInstance 시작 모드? [닫은]


84

주요 활동으로 목록이있는 앱이 있으며 항목을 클릭하면 해당 항목의 상세보기가 열립니다. 또한 주요 활동과 유사하고 의도 한대로 작동하는 검색 활동이 있습니다.

그러나이 검색 활동이 스택에 인스턴스를 한 번만 포함하여 사용자가 여러 번 검색하고 뒤로 클릭하면 이전 검색 결과로 돌아가는 대신 검색을 시작하기 전에 있던 이전보기로 돌아갑니다.

singleTask 및 singelInstance 시작 모드 모두 내가 원하는 것을 수행하는 것 같아서이 목적을 위해 어떤 것을 사용해야하며 그 이유는 무엇입니까?

답변:


141

Android 개발자 가이드 의 Application Fundamentals 페이지에서 :

기본적으로 애플리케이션의 모든 활동은 서로에 대한 선호도를 갖습니다. 즉, 모두 동일한 작업에 속하도록 선호하는 것이 있습니다.

"singleInstance"활동은 작업에서 유일한 활동으로 단독으로 사용됩니다. 다른 활동을 시작하면 FLAG_ACTIVITY_NEW_TASK가 인 텐트에있는 것처럼 시작 모드에 관계없이 해당 활동이 다른 작업으로 시작됩니다. 다른 모든 측면에서 "singleInstance"모드는 "singleTask"와 동일합니다.

위에서 언급했듯이 "singleTask"또는 "singleInstance"활동의 인스턴스는 하나만 있으므로 해당 인스턴스는 모든 새 인 텐트를 처리 할 것으로 예상됩니다. "singleInstance"활동은 항상 스택의 맨 위에 있으므로 (작업의 유일한 활동이기 때문에) 항상 의도를 처리 할 수있는 위치에 있습니다. 그러나 "singleTask"활동은 스택에서 그 위에 다른 활동이있을 수도 있고 없을 수도 있습니다. 그렇다면 인 텐트를 처리 할 수있는 위치에 있지 않으며 인 텐트가 삭제됩니다. (인 텐트가 삭제 되더라도 그 도착으로 인해 작업이 포 그라운드로 오게되었을 것입니다.

4 작업의 활동

두 시작 모드 중 하나의 활동 인스턴스가 하나만 있기 때문에 뒤로 버튼을 누르면 항상 기존 활동 인스턴스로 이동합니다.

중요한 차이점은 "singleTask"는 무언가가 선택 될 때 실행되는 새 활동에 대해 새 작업을 만들 필요가 없다는 것입니다. 매번 뒤로 버튼에서 새 작업을 제거 할 필요도 없습니다.

활동 스택은 모두 하나의 사용자 "작업"과 관련이 있고 singleInstance가 항상이를 처리하는 데 도움이 될 수있는 복잡한 의도 구조가있는 것처럼 들리지 않으므로 singleTask 시작 모드를 사용하는 것이 좋습니다.

다음은 더 많은 정보와 이미지에 대한 크레딧을 제공하는 좋은 블로그 게시물입니다. Android 활동 및 작업 시리즈 – Android의 UI 구성 요소 모델 소개


4
감사! 좋은 읽기처럼 보입니다 ... 실제로 활동의 여러 인스턴스를 원하고 전경 활동이 검색 활동이고 다른 검색이 기존 활동을 사용하는 경우에만 (시장이 작동하는 방식과 같이) singeTop이 후 정확히 임하지만 도움을 주셔서 감사 어쨌든 =) 감사 것을위한
Kman

1
고마워. 이 잘 작성된 게시물은 나를 꼬집는 데 도움이되었습니다.
icecreamman

세부 사항, 특히이 항목에 감사드립니다. (의도는 삭제 되더라도 작업이 전면에 나타나서 남아있을 수 있습니다.) , 이는 내 혼란을 즉시 해결합니다. 난 그냥 아직 지정하지 않고 그것을로 이동하려는 동안 singleTask 활동 스택의 상단에없는 경우 무엇에 대해 생각했다 FLAG_ACTIVITY_CLEAR_TOP .
neevek


30

간단한 방법으로

singleTask :

시스템은 새 작업을 만들고 새 작업의 루트에서 활동을 인스턴스화합니다. 그러나 활동의 인스턴스가 이미 별도의 작업에있는 경우 시스템 onNewIntent()은 새 인스턴스를 생성하는 대신 해당 메서드에 대한 호출을 통해 인 텐트를 기존 인스턴스로 라우팅합니다 . 한 번 one instance에 활동 만 존재할 수 있습니다.

참고 : 활동이 새 작업에서 시작 되더라도 뒤로 단추는 여전히 사용자를 이전 활동으로 되돌립니다.

단일 인스턴스

"singleTask"시스템 이 인스턴스를 보유하는 작업으로 다른 활동을 시작하지 않는다는 점을 제외하면 과 동일 합니다 . 활동은 항상 해당 작업의 유일한 구성원입니다. 이 작업으로 시작된 모든 활동은 별도의 작업에서 열립니다 .


4

singleTasksingleInstance활동에만 작업을 시작할 수 있습니다. 항상 활동 스택의 루트에 있습니다. 또한 장치는 한 번에 하나의 활동 인스턴스 만 보유 할 수 있습니다.
더 많은 android : launchMode .


1
마지막 문장은 singleInstance하지 singleTask 마찬가지입니다
세르 다르 Samancıoğlu

@SerdarS. 귀하의 의견에 감사드립니다. 추가 정보 singleTask-시스템은 새 작업을 만들고 새 작업의 루트에서 활동을 인스턴스화합니다. 그러나 활동의 인스턴스가 이미 별도의 작업에있는 경우 시스템 onNewIntent()은 새 인스턴스를 생성하는 대신 해당 메서드에 대한 호출을 통해 인 텐트를 기존 인스턴스로 라우팅합니다 . 한 번에 하나의 활동 인스턴스 만 존재할 수 있습니다. 더 많은 developer.android.com
Rupesh Yadav

알았어. 내가 틀렸어. 방해해서 죄송합니다.
Serdar Samancıoğlu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.