2017-10-07 5 views
0

MainActivityMessageInboxActivity이있는 응용 프로그램이 있습니다. 사용자가 응용 프로그램을 백그라운드로 설정하고 메시지를 받으면 로컬 알림을 표시합니다. 사용자가 알림을 탭하면 현재 실행중인 MainActivity을 다시 시작하려고합니다. 그러나 테스트에서 현재 MainActivity을 파괴하고 MessageInboxActivity을 표시 한 다음 뒤로 버튼을 누르면 새로운 MainActivity이 생성됩니다. 알림이있는 기존 활동 열기

private void SendLocalNotification() 
{ 
    var notificationID = 1; 

    var title = "New Message"; 
    var message = Constants.Message.NewMessageNotificationText; 
    var builder = new NotificationCompat.Builder(Application.Context); 
    builder.SetContentTitle(title); 
    builder.SetContentText(message); 
    builder.SetAutoCancel(true); 
    builder.SetSmallIcon(Resource.Drawable.pn_message_icon); 

    var mainIntent = new Intent(this, typeof(MainActivity)); 
    var finalIntent = new Intent(this, typeof(MessageInboxActivity)); 
    var stackBuilder = Android.Support.V4.App.TaskStackBuilder.Create(Application.Context); 
    stackBuilder.AddNextIntent(mainIntent); 
    stackBuilder.AddNextIntent(finalIntent); 
    var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent); 
    builder.SetContentIntent(resultPendingIntent); 

    var notificationManager = NotificationManagerCompat.From(Application.Context); 
    notificationManager.Notify(notificationID, builder.Build()); 
} 

MainActivity

LaunchMode=SingleTask는로서 설정된다.

[Activity(Label = "MainActivity", Theme = "@style/MyTheme", 
      WindowSoftInputMode = SoftInput.AdjustPan, ScreenOrientation = ScreenOrientation.Portrait, 
      LaunchMode = LaunchMode.SingleTask)] 
public class MainActivity : BaseActivity 

기존의 MainActivity을 새 것으로 만들지 않고 계속 만들 수 있습니까? 몇 가지 검색을 수행하고 답변을 올바르게 따르고 있다고 생각했지만 아무 것도 작동하지 않는 것 같습니다.

답변

1

activity 문서를 참조하고 android:launchMode 속성으로 검색하십시오.

당신이 LaunchMode = LaunchMode.SingleTask를 사용하여 MainActivity의 상단에 SingleTask로 설정

, 당신의 MainActivity은 (싱글 일명) 시스템에 하나의 인스턴스 만이 허용된다. 시스템에 존재하는 Activity 인스턴스가있는 경우, 전체 Task Hold는 인 텐트가 onNewIntent() 메소드를 통해 전달되는 동안 인스턴스가 맨 위로 이동합니다.

LaunchMode.SingleTop으로 설정하면 호출자 태스크의 스택 맨 위에 동일한 유형의 활동 인스턴스가 이미있는 경우이 모드에 대해 새 활동이 만들어지지 않으며, 대신 Intent가 onNewIntent() 메소드를 통해 존재하는 Activity 인스턴스로 전송됩니다.