如何检查 Windows Universal 10 应用程序是不是已关闭而不是最小化?

Posted

技术标签:

【中文标题】如何检查 Windows Universal 10 应用程序是不是已关闭而不是最小化?【英文标题】:How to check if Windows Universal 10 app is closed not minimised?如何检查 Windows Universal 10 应用程序是否已关闭而不是最小化? 【发布时间】:2016-12-01 17:08:33 【问题描述】:

大家好,我知道 app.xaml 文件中的 OnSuspending 函数允许我在我的应用程序暂停时保存信息。如果用户关闭应用程序,我希望我的用户在我的数据库中自动注销。这是我的代码:

 private async void OnSuspending(object sender, SuspendingEventArgs e)
    
        var deferral = e.SuspendingOperation.GetDeferral();
        if (CommonVariables.LoggedIn)
        
            CommonVariables.LoggedIn = false;
            string jsonPayload = "\"user_id\":\"" + CommonVariables.AuthenticateUserResponseDetails.user.id + "\"";
            HttpClient client = new HttpClient();
            string postUrl = CommonVariables.SERVER + CommonVariables.LogOut;
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, postUrl);
            //encrypt tase

            EDecrypt encrypt = new EDecrypt();
            jsonPayload = encrypt.AES_Encrypt(jsonPayload, CommonVariables.EncryptionKey);

            request.Content = new StreamContent(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonPayload)));
            var result = await client.SendAsync(request);
            string response = string.Empty;
        

        //TODO: Save application state and stop any background activity
        deferral.Complete();
    

这对我很有效,所以当我的用户在他们的设备中关闭应用程序时,该函数被调用并且他们被注销。但是我的问题是,当用户最小化应用程序或将应用程序置于后台并进入另一个应用程序时,该功能也会将用户注销。那么如何调整我的代码,以便我的注销功能仅在用户关闭其设备中的应用程序时才起作用?

【问题讨论】:

你不能。 WinRT(又名 UWP)的核心功能是您的进程可以在暂停后立即终止。每当操作系统需要 RAM 用于其他进程时就会发生。 "instantly" 子句阻止任何与您要求的类似的事情。 【参考方案1】:

当您最小化应用程序时,实际上会发生两件事:

Visibility change App suspension

当用户从你的应用切换到另一个应用时,你的应用不 不再可见,但在 Windows 挂起之前保持运行状态 它。如果用户离开您的应用但激活或切换 在它可以暂停之前回到它,应用程序仍处于运行状态 状态。

因此,如果用户最小化/切换到另一个应用程序并以足够快的速度返回,您的应用程序将继续运行,而您的 OnSuspending 处理程序将永远不会执行。在后台运行时,操作系统将确定您的应用何时暂停以及何时/是否终止(就像 Hans 在他的评论中提到的那样)。


所以要解决您的问题:保留您的 OnSuspending 处理程序,并处理 app resume 事件以重新登录。这将包括最小化和关闭。

【讨论】:

尝试实现一个后台任务,在这里可以响应一些系统事件,如 UserAway、UserPresent 等:msdn.microsoft.com/library/windows/apps/br224839

以上是关于如何检查 Windows Universal 10 应用程序是不是已关闭而不是最小化?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows Universal 10 App 中无异常地获取 StackTrace

如何在Windows 10 Universal中获取设备的唯一标识符?

当应用程序不在前台时,如何在 Windows Universal 中获得正确的时间间隔?

在Windows 10 Universal App上添加Youtube嵌入视频

iOS 和 Universal WINdows App 中的屏幕密度

Windows Universal App 维护开放的 WebSocket