2010-02-24 8 views
26

현재 알림을 표시하고 있습니다. 사용자가이 통지를 클릭하면 응용 프로그램이 시작됩니다. 알림은 서비스가 백그라운드에서 실행 중임을 나타 내기 위해 계속 유지됩니다.알림을 통한 활동 시작 : 중복 된 활동 피하기

Intent notificationIntent = new Intent(context, LaunchActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(1, notification); 

그러나 버그가있는 경우를 발견했습니다. 사용자가 일반 아이콘을 클릭하여 응용 프로그램을 시작하고 활동이 실행 중일 때 알림을 클릭하면 이전 활동이 종료되지 않고 새 활동이 시작되고 나중에 이전 활동이 종료됩니다. 그리고 그것이 전부는 아닙니다. 알림을 더 클릭하면 추가 활동이 만들어지고 이미 실행중인 활동 위에 추가됩니다. 이 문제를 어떻게 방지 할 수 있습니까? 특정 액티비티가 현재 표시되고 있는지 또는로드되었는지 확인하기위한 좋은 체크가 있습니까?

답변

10

활동의 인스턴스가 이미 존재하는 경우, 안드로이드는 액티비티를 만들 재하지만 onNewIntent() 방법으로 실행되지 않습니다는 lanchMode="singleTask"를 사용하여.

는 안드로이드에 의해 기록으로 :

시스템은 새 작업 및 라우트에 대한 의도의 루트에 활동을 만듭니다. 그러나 활동의 인스턴스가 이미 존재하면 시스템은 새로운 인스턴스를 작성하지 않고 onNewIntent() 메소드를 호출하여 기존 인스턴스에 인 텐트를 라우트합니다.

Android documentation for activity mode

2

두 답변은 위에서 언급 한 것처럼, 당신은 매니페스트에 활동의 정의에 정의 된 응용 프로그램의 실행 모드를 설정할 수 있습니다 : 또한

<activity 
    android:name="com.company.ActivityName" 
    android:launchMode="singleTask"> 
</activity> 

당신 FLAG_ACTIVITY_SINGLE_TOP이 유효한 인 텐트 플래그 임에도 불구하고 singleTask 또는 singleInstance에 상응하는 인 텐트 플래그가 없음을 알아두기를 원할 수 있습니다. "singleTask는"내 문제를 해결하도록 설정 http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

+1

은 FLAG_ACTIVITY_NEW_TASK이 (가) singleTask와 동일하지 않습니까? – CopsOnRoad