如何在后台轮询webapi请求而不中断用户体验

本文关键字:中断 用户 体验 请求 webapi 后台 | 更新日期: 2023-09-27 18:12:33

目前我有一个应用程序,允许用户发送数据到restful webapi,同时连接到互联网,但这个应用程序也应该离线工作。因此,我将用户操作存储在sqlite数据库中。当移动设备找到互联网连接时,这些信息应该持久化到webapi中。我已经实现了

public bool IsConnected(){
        var connectivityManager = (ConnectivityManager)GetSystemService (ConnectivityService);
        var activeConnection = connectivityManager.ActiveNetworkInfo;
        if ((activeConnection != null) && activeConnection.IsConnected) {
            return true;
        }
        return false;
}

这是由每个活动的OnCreateOptionMenu()调用。这很好。然而,当我放置一个webapi请求,这是可悲的同步调用导致应用程序显示一个空白的屏幕,直到它已经处理了这个。现在这是我想取代的用户体验,类似于ASYNC(异步)请求,它在后台工作的一切没有任何中断。但我正在努力实现这一点。我确实在应用程序主屏幕上有一个同步按钮,其中onclick运行异步调用,但我不相信应用程序用户按下此按钮。因此我想在后台触发这项工作。有人能给点建议吗?

如何在后台轮询webapi请求而不中断用户体验

感谢@MilenPavlov和@CDrosos。

我选择了CDrosos的解决方案,因为这正是我想要的。

我在BaseActivity中创建了一个静态计时器成员,它在应用程序启动时被设置。这样就不会发生并发。这允许我创建一个计时器经过的方法,它将检查数据库中等待的web请求,并发布如果IsConnected和pendingWebRequests.Any()。

    if (_timer == null)
    {
        _timer = new Timer();
        _timer.Elapsed += _timer_Elapsed;
        _timer.Interval = (1000 * 60) * 5; // 5 ;
        _timer.Start();
    }