2010-02-17 4 views
0

나는 안드로이드 응용 프로그램을 가지고 있습니다. 내 활동 중 하나에 의도 필터를 추가하여 브라우저 앱에서 URL을 클릭하면 내 활동을 시작할 수 있습니다. 다음과 같이 표시됩니다.업무 방해물 깨기

<data android:host="www.mysite.com" android:scheme="http"></data> 

문제는 브라우저에서 내 활동을 시작할 때마다 이미 시스템에있을 수있는 기존 인스턴스를 다시 사용하는 대신 브라우저 앱의 작업 내에 새로운 활동 인스턴스가 생성된다는 것입니다.

이 활동은 싱글 톤을 사용하기 때문에 나에게 문제가된다. 이 액티비티 인스턴스가 두 개 이상 존재할 수 있다면 싱글 톤을 공유하려고 할 때 두 인스턴스가 충돌하는 이상한 상황이 발생할 수 있습니다. 내가 확인하고 액티비티 인스턴스가 개별 태스크에있을지라도 동일한 싱글 톤 인스턴스를 공유한다는 것을 알 수있다.

나에게 이상적인 솔루션은 내 응용 프로그램의 기존 인스턴스를 어떻게 든 포 그라운드로 가져올 수 있고 내 응용 프로그램의 기존 인스턴스가 실행되는 상황에서 대상 활동을 시작하거나 다시 시작할 수있는 경우입니다. 단지 포수 더미 활동을 가리 키도록 필터 위의

  1. 등록 :

    그래서 나는이 시도.
  2. 더미 활동은 브로드 캐스트 인 텐트를 만들고 시스템에 'create me'메시지를 브로드 캐스트하려고 시도합니다.
  3. 실제 대상 활동이이 브로드 캐스트 메시지를 수신하도록 설정됩니다. 시스템에 이미 활동의 인스턴스가 있으면 바라 건데, 그것은 전경에 올 것이다. 인스턴스가 없으면 브라우저 작업에서 생성 할 수 있습니다.

이것이 의미있는 것인지 확실하지 않습니다. 내 기본 목표는 시스템에서 하나의 인스턴스로 활동을 제한하는 것입니다. 이 앱은 로그인 상태가 유지되어야하는 소셜 미디어 앱입니다. 위에서 언급 한 싱글 톤은 로그인 상태를 유지하므로 여러 개의 로그인 인스턴스가 실행되는 것을 허용하지 않고 시스템의 주변에 하나만 갖고 싶습니다.

감사

답변

0

는이 작업을 달성하기 위해 singleTop하는 활동 발사 모드를 설정할 수 있습니다.

android : launchMode 활동 시작 방법에 대한 지침. 인 텐트 객체의 활동 플래그 (FLAG_ACTIVITY_ * 상수)와 함께 작동하는 네 가지 모드가있어 인 텐트를 처리하기 위해 해당 활동이 호출 될 때 어떤 일이 발생해야 하는지를 결정합니다. 그들은 다음과 같습니다. "표준" "singleTop" "singleTask" "singleInstance" 기본 모드는 "표준"입니다.

https://developer.android.com/guide/topics/manifest/activity-element.html#lmode

+0

안녕 sadboy, 나는 여전히 영향을 singleTop에 launchMode를 설정,하지만했다. 작업의 mem 주소를 인쇄하고 브라우저가 새 인스턴스를 시작할 때마다 이미 실행중인 인스턴스를 다시 시작하는 대신 다른 mem 주소임을 확인합니다. – user246114

+0

그게 이상합니다. 액티비티를 선언 한 응용 프로그램 매니페스트에 넣고 있습니까? 그리고 나는 당신도 singleinstance와 같은 다른 launch 모드를 시도한 것 같습니까? –