使用Windows Phone的应用程序间通信的重新实例化问题

本文关键字:实例化 问题 通信 Windows Phone 应用程序 使用 | 更新日期: 2023-09-27 17:59:26

我正在开发一个WP8应用程序,该应用程序使用一个Web浏览器控件来显示有状态的服务器内容。在WP8上,您可以手动在应用程序之间切换。例如,如果您想复制&将一个应用程序中的一些信息粘贴到浏览器输入字段中。如果以这种方式切换,则当前应用程序实例将保持活动状态。这意味着web会话和浏览器控件的当前页面将保持可用。

现在我想让另一个应用程序用浏览器控件直接将一些数据发送到应用程序中,而无需重新启动…

据我所知,有三种方法可以处理应用程序间的通信:

  1. 注册一个文件类型,通过从本地存储启动该文件来打开应用程序
  2. 注册应用程序协议并使用Launcher.LaunchUriAsync()在查询字符串中提交参数
  3. 使用共享存储文件

详细信息可以在这里找到。

我认为最后一种方法并不有用,因为在您启动第二个应用程序后,现在有办法激活调用应用程序,或者有什么有用的方法可以重新激活网络浏览器应用程序吗?

我尝试了第二种方法,但遇到了问题,因为它通过设计启动了一个新实例。这意味着InitializePhoneApplication被调用。有一个用于读取传入参数的自定义UriMapper的入口点。因此,旧的应用程序实例被杀死,所有会话数据、cookie和输入字段都消失了。使用WP网络浏览器控件,您无法存储cookie和页面状态,因此快速应用程序简历也是不可能的。

private void InitializePhoneApplication()
{
    if (this.phoneApplicationInitialized)
    {
        return;
    }
    RootFrame = new TransitionFrame();
    RootFrame.Navigated += this.CompleteInitializePhoneApplication;
    RootFrame.UriMapper = new AssociationUriMapper();
    //...
    this.phoneApplicationInitialized = true;
}

是否有其他方法或可能性使用所示方法在应用程序之间发送数据,而无需使用LanchUri()重新启动它们

这意味着,在不重新初始化整个应用程序的情况下,将一些数据发送回正在运行的实例,以便页面状态和会话状态在目标应用程序上仍然可用。

向致以最良好的问候

Holger

使用Windows Phone的应用程序间通信的重新实例化问题

FastAppResume就是解决方案。我还没用过,还以为它可以重新启动应用程序。但事实并非如此。此示例显示了如何重用现有实例。

问候Holger