我的应用程序有MainActivity
和MessageInboxActivity
。如果用户将应用程序置于后台并收到消息,则会显示本地通知。当用户点击通知时,我想恢复当前正在运行的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
继续而不是为新的销毁?我做了一些搜索,并认为我正确地遵循了答案,但似乎没有任何效果。
答案 0 :(得分:1)
您可以参考文档activity并搜索属性android:launchMode
。
当您使用SingleTask
将MainActivity
设置为LaunchMode = LaunchMode.SingleTask
时,您的MainActivity
只允许系统中有一个实例(也称为Singleton) 。如果系统中存在一个Activity实例,那么整个Task实例将被移动到顶部,而Intent将通过onNewIntent()
方法传递。
对于您的场景,您可以将LaunchMode
设置为LaunchMode.SingleTop
,对于此模式,如果调用者任务中堆栈顶部已存在具有相同类型的Activity实例,则会不是任何新的Activity创建,而是通过onNewIntent()
方法将Intent发送到现有的Activity实例。