簡體   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