目前我有一个应用程序,允许用户在连接到互联网时将数据发送到安静的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运行异步调用,但我不相信应用程序用户按此按钮。因此,我想在后台触发这项工作。有人可以建议吗?
答案 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请求。