大家好我知道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();
}
这对我很有用,所以当我的用户在他们的设备中关闭应用程序时,会调用该函数并将其注销。然而,我的问题是该功能还会在用户最小化应用程序或将应用程序置于后台并进入另一个应用程序时将用户注销。那么如何调整我的代码以便我的注销功能仅在用户关闭其设备中的应用程序时才有效?
答案 0 :(得分:0)
当您最小化应用时,实际上会发生两件事:
当用户从您的应用切换到另一个应用时,您的应用就是否定 可见时间较长,但在Windows挂起之前一直处于“运行”状态 它。如果用户切换远离您的应用程序但激活或切换 在它可以暂停之前回到它,应用程序仍然在运行 状态。
因此,如果用户最小化/切换到另一个应用程序并且恢复得足够快,您的应用程序将继续运行,您的OnSuspending
处理程序将永远不会执行。在后台运行时,操作系统将确定您的应用程序何时停止以及何时/是否终止(如Hans在评论中提到的那样)。
所以要解决您的问题:保留您的OnSuspending
处理程序,并处理app resume事件以重新登录。这将涵盖最小化和关闭。