我不知道如何为共享的Xamarin.Forms项目正确实例化本机Android HttpClient。我已经完成阅读和搜索。
问题: 1.我如何确保我的Android客户端将使用本机HttpClient进行各种网络传输,甚至用于共享代码中定义的操作? 2.我必须在代码的Project.Android项目部分中实例化HttpClient并将该对象注入到Project.App()构造函数(如Project.App(HttpClient httpClient))中,还是通过某种构建自动执行该功能,时间魔术? 3.目前,我的代码可以使用默认的构造函数构建的HttpClient很好,但是在实例化本机HttpClient时可以使用构造函数参数吗?
当前代码段和设置: -范围:Xamarin.Forms Android -体系结构:armeaby-v7a; arm64-v8a(在单独的配置中具有x86,效果更好) -HttpClient实施:Android -SSL / TLS实施:默认(本机TLS 1.2+) -Xamarin.Forms 4.1.0.581479 -SDK:NETStandard 2.0.3
Project.Android MainActivity.cs:
using Android.App;
using Android.Content.PM;
using Android.OS;
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
}
我在共享项目中的HttpClient实例化: 基本上在首次需要时使用默认构造函数创建对象,并在每次操作中重复使用
private static Lazy httpClient = new Lazy(
() =>
{
var client = new HttpClient();
return client;
});
答案 0 :(得分:1)
Android的最终目的-SSL / TLS实施可提高性能,因此我想建议您使用NuGet包 modernhttpclient 。 在代码中替换下面的行
private static Lazy httpClient = new Lazy(() =>
{
var client = new HttpClient(new NativeMessageHandler());
return client;
});
使用 NativeMessageHandler ,您可以处理Android和iOS,
希望这会对您有所帮助。