我的布局xml
中有一个GUI元素,它在第一次显示时会执行一些繁重的计算。
现在,当我第二次加载视图时,我不希望这种情况发生。
我尝试使用单例模式将构造函数设为私有,但Inflater
无效。
然后我想知道是否可以在构造函数中返回现有实例,从而避免了私有构造函数的问题。 (顺便说一下,我正在使用Xamarin C#),但那并没有用。
还有其他方法可以避免重复执行昂贵的操作吗?
答案 0 :(得分:1)
是的,还有另一种方式:
不要将繁重操作的结果存储在View中。使用例如一个静态类。然后,如果已经在静态类中保存了某些内容,则可以在开始操作之前进行检查。
答案 1 :(得分:1)
如果您不想将其移动到静态类,那么最快的方法是向视图添加静态构造函数(并将变量标记为静态)。以下是在新创建的Android应用程序上使用MainActivity的静态构造函数的快速示例。
[Activity(Label = "App47", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
private static double calculationResult;
private static bool calculationsDone;
static MainActivity()
{
PerformCalculation().ContinueWith(t =>
{
calculationResult = t.Result;
calculationsDone = true;
}
);
}
private static Task<double> PerformCalculation()
{
var tcs = new TaskCompletionSource<double>();
tcs.SetResult(10.6);
return tcs.Task;
}
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
}