2017-10-07 175 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

當您設置到SingleTaskMainActivity使用LaunchMode = LaunchMode.SingleTask頂部,你MainActivity允許只有一個實例系統(又稱辛格爾頓)。如果系統中存在一個存在的Activity實例,則整個任務持有該實例將移至頂端,而Intent將通過onNewIntent()方法遞送。

對於您的場景,您可以將LaunchMode設置爲LaunchMode.SingleTop,對於此模式,如果調用方Task中堆棧頂部已經存在具有相同類型的Activity實例,則不會創建任何新的Activity,相反,Intent將通過onNewIntent()方法發送到現有的Activity實例。