我有一个 Xamarin 应用程序,其中包含从 API 中提取的多个数据表。目前,调用 API 并插入数据的代码如下所示:
try
{
// Table1
var table1Response = await httpClient.Value.GetStringAsync("http://website.com/api/table1");
var table1 = JsonConvert.DeserializeObject<List<Table1>>(table1Response);
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
conn.CreateTable<Table1>();
conn.DeleteAll<Table1>();
conn.InsertAll(table1);
conn.Close();
}
// Table2
var table2Response = await httpClient.Value.GetStringAsync("http://website.com/api/table2");
var table2 = JsonConvert.DeserializeObject<List<Table2>>(table2Response);
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
// Checks for table and creates if doesn't exist
conn.CreateTable<Table2>();
// Deletes all old data
conn.DeleteAll<Table2>();
// Updates with new reference data from API
conn.InsertAll(table2);
conn.Close();
}
// Repeats for all tables in the app.
因为它必须等待 API 调用,所以当在应用的 OnStart(( 中调用此方法时,数据会逐个表加载,并且如果导航到应用中需要尚未完成调用的某些数据的页面,显然应用会崩溃。我昨天向我正在编写的一个函数寻求帮助,该函数使用 foreach 循环以编程方式插入数据(请参阅:Xamarin/C# - 以编程方式将数据插入多个表的 SQLite 数据库?(,我被告知这不是一种聪明的方法,根据需要定义每个表是一种更好的方法。
我现在的问题是,我可以对我的 API 调用方法执行哪些操作,让它一次进行多个 API 调用并假设一次性加载所有数据?这甚至有可能做到,或者我应该尝试构建一个加载屏幕,等到所有数据都被检索到后才允许进一步使用该应用程序?
您可以尝试以 xamarin 形式使用backgrounding Service
。
后台服务非常常用于以下任务: 在后台执行,例如下载文件,长时间 计算、播放音乐和定期方法调用。每个平台 启用和注册后台有不同的方式 服务。
因为每个平台都有自己的后台服务方式和规则。我们必须为每个平台提供服务。
有关更多详细信息,您可以查看:
https://www.youtube.com/watch?v=Z1YzyreS4-o
https://robgibbens.com/backgrounding-with-xamarin-forms/
https://winstongubantes.blogspot.com/2018/09/backgrounding-with-xamarinforms-easy-way.html
此外,如果您想深入了解每个平台的高级后台服务,您可以查看以下链接:
安卓后台服务链接
iOS 后台服务链接