我正在尝试实现一种方法来检测用户的在线或离线状态。所以我在 xamarin.forms 中使用了生命周期事件。当应用程序转到后台时,我将在线标志设置为 false,然后使用信号集线器方法发送它:
async protected override void OnSleep()
{
online = false;
if (!string.IsNullOrEmpty(Preferences.Get("userid", "")) && !string.IsNullOrEmpty(Preferences.Get("permission", "")))
{
if (Preferences.Get("permission", "") == "Student")
{
try
{
await SendMessage(Preferences.Get("userid", ""), false);
}
catch (Exception exp)
{
MessagingCenter.Send(this, App.UpdateStatusErrorMessage, exp.Message);
}
await updateuserstatus(Preferences.Get("userid", ""));
}
}
}
但除非应用程序第二次或第三次进入后台,否则不会触发它。我尝试添加
Task.Delay(500)
然后调用 base.OnSleep()
但没有任何效果。有什么建议么?预先感谢
由于您希望在用户离开页面时更新您的状态,因此 Page.OnDisappearing Method 可能更合适。
protected override async void OnDisappearing()
{
base.OnDisappearing();
online = false;
if (!string.IsNullOrEmpty(Preferences.Get("userid", "")) && !string.IsNullOrEmpty(Preferences.Get("permission", "")))
{
if (Preferences.Get("permission", "") == "Student")
{
try
{
await SendMessage(Preferences.Get("userid", ""), false);
}
catch (Exception exp)
{
MessagingCenter.Send(this, App.UpdateStatusErrorMessage, exp.Message);
}
await updateuserstatus(Preferences.Get("userid", ""));
}
}
}