2014-11-27 2 views
0

launchMode는 "singleTop"입니다 : 그것은 완료 (서버 인증)는 GridActivity 전화 할게 때android 여러 인스턴스를 처리하는 방법?

<activity android:name=".MainActivity" android:label="@string/app_name" android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
    <activity android:name=".GridActivity"></activity> 

MainActivity는 시작 화면입니다.

문제

은 매우 구체적이다 : 응용 프로그램 서랍 & "바탕 화면"(실행 화면 - 기본 런처) :

이 아이콘은 두 곳에서 나타납니다이 Google Play에서 앱을 설치

.

단계는 문제를 재현하는 방법 :

  1. 오픈 응용 프로그램 서랍에서 응용 프로그램을하고 GridActivity가 배경에 응용 프로그램을 보내
  2. 눌러 "홈"버튼을 표시 할 때까지 기다립니다
  3. '데스크톱'(장치의 기본 런처)에서 앱을 엽니는
  4. 응용 프로그램은 새 인스턴스 시작합니다

"singleTop"launchMethod 때문에 응용 프로그램이 GridActivity에 직접 연결될 것으로 예상됩니다.

동의어, 3 단계에서 응용 프로그램 서랍에서 응용 프로그램을 다시 열면 GridActivity로 바로 이동합니다.

무엇이 누락 되었습니까?

답변

0

시작 활동을 "스플래시 화면"으로 사용하기 때문에이 동작이 손상 될 수 있습니다. 일단 파괴되면 다른 프로세스가이를 호출하여 새로운 프로세스에서이를 시작합니다. 이상이 읽기 :

Android "single top" launch mode and onNewIntent method

은 "singleTop"발사 모드는 아마 필요가 없습니다. 이 문제를 해결하기 위해 주 활동에서 시작 화면을 시작하는 "처음 통과"플래그를 사용합니다. 그것은 꽤 잘 작동하는 것 같습니다.

편집 :

당신은 "launchMode"을 읽어주의해야한다 - singleTop과 "표준"모드는 문서에서이 문제를 가지고 :

액티비티 "표준"으로 또는 "singleTop"실행 모드는 여러 번 인스턴스화 된 일 수 있습니다. "singleTop"액티비티에 대한 이미 존재 인스턴스에 에서 대상 작업이지만,하지 않을 경우, 예를 들어

:

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

당신은 아마 singleTop의 이러한 측면을 경험하고있다 스택의 맨 위 또는 스택 맨 위의 맨위에 있지만 대상 태스크에는없는 경우 - 새 인스턴스는 이 생성되어 스택에 푸시됩니다.

두 가지 실행 위치로 인해 두 가지 다른 대상 작업이 발생합니다. 이것은 두 화면이 인 텐트를 만드는 방법 또는 "스플래시 화면"이 파괴되어 현재 존재하지 않기 때문일 수 있습니다 (안타깝게도 "단지"파괴되지 않습니다 - Android는 처리 및 메모리를 보존하기 위해 활동을 파괴하는 몇 가지 알고리즘을 가지고 있습니다. 일반적으로 활동이 표시되지 않으면 언제든지 삭제하고 다시 작성할 수 있다고 가정합니다.

+0

MainActivity는 파괴되지 않고 GridActivity에 대한 StartActivity()를 호출하여 활성 상태를 유지합니다. 뒤로 버튼을 눌러 애플리케이션을 종료 할 때만 삭제됩니다. 문제가 있다면 응용 프로그램 서랍이나 "바탕 화면"에서 응용 프로그램을 열어도 문제가되지 않지만 위에 열거 한 내용을 읽으면 한 곳에서 응용 프로그램을 연 다음 열 때만 문제가 발생합니다 다시 다른 사람에게서 (응용 프로그램 서랍에서 처음으로 두 번째로 또는 "바탕 화면"또는 viceversa에서) –

+0

내 응답을 편집했습니다. 희망이 도움이됩니다. – Jim

+0

이 문제를 어떻게 해결해야합니까? GridActivity를 첫 번째 활동으로 만들고 MainActibity (SplashScreen)를 표시하여 해결해야합니까? –

관련 문제