在android中制作单例视图

时间:2015-08-11 15:15:01

标签: c# android xamarin

我的布局xml中有一个GUI元素,它在第一次显示时会执行一些繁重的计算。

现在,当我第二次加载视图时,我不希望这种情况发生。

我尝试使用单例模式将构造函数设为私有,但Inflater无效。

然后我想知道是否可以在构造函数中返回现有实例,从而避免了私有构造函数的问题。 (顺便说一下,我正在使用Xamarin C#),但那并没有用。

还有其他方法可以避免重复执行昂贵的操作吗?

2 个答案:

答案 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());
    }
}