2

대기중인 인 텐트가있는 알림에서 백 스택으로 활동을 시작합니다. 여기에 내가 그것 (활동 B는 내가 다시 버튼으로 내 응용 프로그램을 종료 그 후recents에서 앱을 열면 마지막 활동이 아니라 이전 활동으로 복원됩니다.

Bundle extras = activity.getIntent().getExtras(); 
boolean isFromNotification = extras != null && 
     extras.getBoolean(GCMUtils.NOTIFICATION_INTENT, false); 
boolean noBackStack = isFromNotification && 
     Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB; 
if (activity.isTaskRoot() || noBackStack) { 
    Intent intent = activity instanceof ActionBarActivity ? 
      ((ActionBarActivity)activity).getSupportParentActivityIntent() : 
      NavUtils.getParentActivityIntent(activity); 
    if (noBackStack) { 
     intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
    } 
    activity.startActivity(intent); 
    activity.finish(); 
} else { 
    activity.onBackPressed(); 
} 

활동 B 마무리 활동을 시작 다음 (intent 시작) 활동 A에서

TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext); 
stackBuilder.addNextIntentWithParentStack(intent); 
stackBuilder.editIntentAt(0).putExtra(GCMUtils.NEXT_INTENT,BaseFragment.FragmentId.DIALOGS). 
     setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
resultPendingIntent = stackBuilder.getPendingIntent(requestCode, PendingIntent.FLAG_ONE_SHOT); 

입니다

수 있도록하는 방법이다 주요 활동). 이제 최근 앱을 열고 내 앱을 클릭하면 액티비티 B 대신 액티비티 A가 복원됩니다. 앱은 안드로이드 2.3에서 재생됩니다. 나는 왜 그것이 B. 대신에 A를 되 돌리는지 이해하지 못한다. 나는 무엇을 놓치고 있는가?

+0

CLARIFICATION! 뒤로 버튼과 홈 버튼을 사용하면 효과가 달라집니다. 홈 버튼의 경우 예상대로 활동 B를 복원합니다. 뒤로 버튼의 경우에만 활동 A를 복원합니다. 응용 프로그램을 시작한 인 텐트를 저장하고 최근 응용 프로그램에서 시작할 때 재사용 할 수 있습니까? P. 이 동작을 재현하려면 응용 프로그램을 강제로 중지해야합니다. – Asimaruk

+0

당신의 진술은 말이되지 않습니다. BACK과 HOME은 완전히 다른 일을 수행합니다 BACK을 누르면 현재 활동이 끝나고 스택의 이전 활동으로 돌아갑니다. 이전 활동이 없으면 앱이 종료됩니다. 그러나 HOME을 누르면 어떤 활동에서나 finish()를 호출하지 않습니다. 작업을 백그라운드로 옮깁니다. 기존 작업을 백그라운드에서 포 그라운드로 가져올 때 (최근 작업 목록에서 선택), 작업은 이전 작업과 완전히 동일한 상태 여야합니다 (즉, 동일한 작업이 맨 위에 있어야 함) . –

+0

http://stackoverflow.com/questions/19813652/remove-data-from-notification-intent/19820057#19820057 어쩌면 이것이 당신이보고있는 것을 설명해줍니다. –

답변

0

Android 2.3 장치에서 실행중인 경우 호환 라이브러리 버전 TaskStackBuilder을 사용하고 있습니다. 이것은 백 스택을 구성하지만 안드로이드 < 3.0에서는 완전한 동작을 지원하지 않습니다. 당신이 TaskStackBuilder에 대한 설명서를 보면 명확 상태 :

TaskStackBuilder 플랫폼의 장치의 버전에 교차 작업 탐색 주위 올바른 규칙을 준수하기 위해 이전 버전과 호환되는 방법을 제공합니다. Android 3.0 이상을 실행하는 기기에서 startActivities() 메소드를 호출하거나 getPendingIntent (int, int)로 생성 된 PendingIntent 을 전송하면 백 스택을 처방대로 구성합니다. 플랫폼의 이전 버전을 실행하는 장치에서 이러한 동일한 호출은 제공된 스택에서 최상위 활동을 호출하고 나머지 합성 스택은 무시하고 이전 키로 이전 작업으로 돌아갈 수 있도록합니다.

나는 굵은에서 텍스트의 관련 부분을 강조했습니다.

2.3 기기에서 알림에서 앱을 실행하면 다시 스택이 없습니다. 그냥 액티비티 A를 시작합니다. 나중에 앱을 종료하면 (스택의 모든 액티비티 완료) 최근 작업 목록에서 앱을 실행하면 알림에서 앱을 시작한 것과 같은 방식으로 앱이 시작됩니다. 액티비티 A를 시작하면됩니다.

+0

나는 안드로이드 3.0 이하에서 스택이 없다는 것을 알았다. 활동 A에서 뒤로 버튼을 누르면 홈 화면으로 이동합니다. 그러나 나는 활동 A를 마치고 또 다른 활동 B를 시작합니다. 정말로 시작합니다. 분명히 볼 수 있습니다. 그리고 지금도 여전히 A를 복원하는 이유는 무엇입니까? – Asimaruk

관련 문제