У меня есть приложение для Android .net (мигрировано из Xamarin), и внутри него есть веб -просмотр, который отображает веб -приложение, а также у меня есть служба переднего плана Android, которая периодически вызывает API для синхронизации некоторых данных на устройстве. Служба переднего плана использует httpclient для выполнения вызовов (только), и в зависимости от размера данных, который вызов HTTP от службы переднего плана может занять несколько секунд, чтобы получить ответ. Во время этого вызова WebView.LoadUrl не загружает какие -либо данные, пока HTTPClient из службы переднего плана не завершит запрос. Это проблема, и я не знаю, что происходит < /p>
Вот моя инициализация WebView внутри MainActivity: < /p>
web = FindViewById("myWebView");
web.Settings.LoadsImagesAutomatically = true;
web.Settings.JavaScriptEnabled = true;
web.Settings.JavaScriptCanOpenWindowsAutomatically = true;
web.Settings.DomStorageEnabled = true;
web.Settings.SaveFormData = false;
web.Settings.SetGeolocationEnabled(true);
web.Settings.UserAgentString = $"{GetType().Assembly.GetName()}";
var client = new MyWebViewClient(this);
_web.SetWebViewClient(client);
_web.SetWebChromeClient(new MyWebChromeClient());
< /code>
Я попытался создать один экземпляр для httpclient, но без успеха. Вызов httpclient является асинхронным, и я использую таймер для периодического вызова API для данных. < /P>
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
{
try
{
_timer = new Timer(_ => _ = TrySyncPaymentsAsync(), null, TimeSpan.Zero, TimeSpan.FromSeconds(40));
return StartCommandResult.Sticky;
}
catch (Exception e)
{
Console.WriteLine(e);
return StartCommandResult.NotSticky;
}
}
public async Task TrySyncPaymentsAsync()
{
try
{
var httpClient = new HttpClient();
var url = $"{targetUrlBase}/data/get";
var request = new EnhancedHttpRequestMessage(HttpMethod.Get, url, [new MediaTypeWithQualityHeaderValue("text/json")]);
var response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -to-finish