【问题标题】:App or Code to Suspend Resume UWP app without Visual Studio在没有 Visual Studio 的情况下暂停恢复 UWP 应用的应用或代码
【发布时间】:2019-05-16 05:18:52
【问题描述】:

我的问题类似于How to make UWP app to suspend and resume state,但我需要一个可以提供给我的 QA 团队的应用程序,以便他们可以更轻松地在我的应用程序中调用 Suspend 和 Resume。

由于 Visual Studio 有一个“生命周期事件”工具栏,可让您暂停和恢复您的应用程序,我认为 Visual Studio 附带的应用程序必须执行此操作。但是,仔细阅读 Visual Studio 文件,我找不到这样的可执行文件。

有没有人知道可以暂停或恢复 Windows 商店应用的独立应用程序(是否与 Visual Studio 一起安装)?

如果没有,是否有人有可以暂停或恢复任意 UWP 应用的示例代码?我知道有一些用于构建调试器的 C++ 库,但我不是 C++ 程序员。如果有 C# 方法可以做到这一点,请发布一些代码。如果一定是 C++ 应用,请发一个完整的易于构建的示例。

【问题讨论】:

  • 可以进入平板模式并切换应用吗?
  • 我已经尝试过,如上面链接的其他堆栈溢出文章中所述,但这似乎不会导致具有大量内存的设备/桌面暂停。我相信较新的前台/后台生命周期模型使这项工作有所不同。

标签: c# c++ debugging uwp suspend


【解决方案1】:

UWP 提供用于暂停和恢复应用的专用 API: StartSuspendAsync StartResumeAsync

例如,您可以如何暂停 FeedbackHub 应用:

var diag = await AppDiagnosticInfo.RequestInfoForPackageAsync("Microsoft.WindowsFeedbackHub_8wekyb3d8bbwe");
if (diag.Count > 0)
{
    var resourceGroups = diag[0].GetResourceGroups();
    if (resourceGroups.Count > 0)
    {
        await resourceGroups[0].StartSuspendAsync();
    }
}

请注意,您需要声明“appDiagnostics”功能才能调用这些 API:

<Package
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap mp rescap">
  ...

  <Capabilities>
    <rescap:Capability Name="appDiagnostics" />
  </Capabilities>
</Package>

【讨论】:

    【解决方案2】:

    一种可能性是测试人员简单地最小化和最大化应用程序。这将触发暂停和恢复。

    要检查应用程序是否真的被暂停和恢复,您可以使用日志记录,例如MetroLog 或任何其他日志记录解决方案。

    对于快速测试,可以这样做:

    MetroLog

    在包管理器控制台中输入:

    Install-Package MetroLog 
    

    代码

    在 App 构造函数中添加如下内容:

    LogManagerFactory.DefaultConfiguration.AddTarget(LogLevel.Trace, LogLevel.Fatal, new StreamingFileTarget());
    log = LogManagerFactory.DefaultLogManager.GetLogger<App>();
    
    this.Suspending += OnSuspending;
    this.Resuming += OnResuming;
    

    那么有这两种方法:

    private void OnSuspending(object sender, SuspendingEventArgs e)
    {
        var deferral = e.SuspendingOperation.GetDeferral();
        log.Trace("OnSuspending called");
        deferral.Complete();
    }
    
    private void OnResuming(object sender, object e)
    {
        log.Trace("OnResuming called");
    }
    

    测试

    • 部署应用
    • 退出VS
    • 从 Windows 菜单调用应用程序
    • 最小化和最大化应用程序

    在 ApplicationData.Current.LocalFolder 文件夹中,您将找到一个新文件夹 MetroLogs,其中包含一个类似于 Log - 20181216.log 的文件。

    在文本编辑器中打开它:

    如您所见,应用程序已暂停并恢复。

    这就是你要找的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2020-03-30
      相关资源
      最近更新 更多