繁体   English   中英

Xamarin Android - 如何提高程序的可靠性

[英]Xamarin Android - How to improve the speed the reliability of the program

所以我正在做一个与 Firebase Firestore 交互的程序,我是 xamarin android 的新手,所以我不确定如何正常工作。

所以我的程序有一些问题,最重要的是:

  1. 我有一个带有快照侦听器的片段的活动,每次我更改片段时,侦听器都会重新启动并再次将数据获取到回收视图例如:
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
      var view = inflater.Inflate(Resource.Layout.fragment_service, container, false);
      recyclerview = view.FindViewById<RecyclerView>(Resource.Id.fragment_service_RecyclerView);
      recyclerview.SetLayoutManager(new LinearLayoutManager(recyclerview.Context));
      ListenForChanges();
      return view;
    }

ListenForChanges() ->

      CrossCloudFirestore.Current
     .Instance
     .GetCollection("FichaServicos")
     .WhereEqualsTo("idFicha", Doc.id)
     .AddSnapshotListener((snapshot, error) =>
     {
       if (snapshot != null)
       {
         foreach (var documentChange in snapshot.DocumentChanges)
         {
           switch (documentChange.Type)
           {
    ...

所以我的问题是,我能否以某种方式全局保存数据或在片段之间发送数据,这样我就不需要每次都从 firestore 请求数据?

全局保存数据

实际上,有很多解决方案可以实现它

选项1 :

您可以使用SharedPreferences 例如设置数据:

        var data = GetSharedPreferences("Data", 0);
        var editor = data.Edit();
        editor.PutString("name","ABC");
        editor.Commit();

并获取数据:

        var data = GetSharedPreferences("Data", 0);
        string name = data.GetString("name", "default");

选项 2:

如果数据类型是自定义的(如自定义模型或列表),您可以为数据管理器定义一个单例类

public class DataManager
{
    private static DataManager instance;


    public List<string> Source { get; set; }

    //other data that ylou want to save , you need to defien them in advance
    //public ...

    private DataManager() { }

    public static DataManager Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new DataManager();
            }
            return instance;
        }
    }
}

并参考它如下

//set the value after you get it from filestore
DataManager dataManager = DataManager.Instance;
dataManager.Source = xxx;

选项 3:

您可以使用像 sqlite 这样的本地数据库。 查看官方文档了解更多详情。

在片段之间发送数据

在活动中

Bundle mybundle = new Bundle();
mybundle.PutString("MyDataTag", "Hello");
//you can also put other data like int , float and long
FragmentTransaction fragmentTransaction = SupportFragmentManager.BeginTransaction();
var myFragment = new VerifyReportFragment();
myFragment .Arguments = mybundle;

在片段 OnCreateView 中

String stringData= Arguments.GetString("MyDataTag");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM