如何在不中断用户体验的情况下在后台轮询webapi请求?

时间:2015-09-14 08:38:56

标签: c# android xamarin xamarin.android xamarin-studio

目前我有一个应用程序,允许用户在连接到互联网时将数据发送到安静的webapi,但此应用程序也应该脱机工作。因此,我将用户操作存储在SQLlite数据库中。当移动设备找到互联网连接时,此信息应保留到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(asynchronus)请求,它可以在后台运行所有内容而不会中断。但我正在努力实现这一点。我确实在应用程序主屏幕上有一个同步按钮,其中onclick运行异步调用,但我不相信应用程序用户按此按钮。因此,我想在后台触发这项工作。有人可以建议吗?

1 个答案:

答案 0 :(得分:1)

谢谢@MilenPavlov和@CDrosos。

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

我在BaseActivity中创建了一个静态计时器成员,它在app start上设置了。这样就不会发生并发。这允许我创建一个timer elapsed方法,该方法将检查数据库是否有未决的Web请求,并发布IsConnected和pendingWebRequests.Any()。

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

然后提出webapi请求。