浏览代码

ui资源释放

zhaoyang 3 年之前
父节点
当前提交
29d9b20d7f

+ 8 - 0
GameClient/Assets/Game/HotUpdate/Data/Handler/RoleDataHandler.cs

@@ -5,6 +5,7 @@ namespace GFGGame
 {
     public class RoleDataHandler
     {
+        private static int seconds = 0;
         public static void StartUpdate()
         {
             StopUpdate();
@@ -35,6 +36,13 @@ namespace GFGGame
             {
                 CommonSProxy.ResetDailyData().Coroutine();
             }
+
+            if (seconds >= TimeUtil.SECOND_PER_MUNITE * 0.1)
+            {
+                ViewManager.CheckDispsoe();
+                seconds = 0;
+            }
+            seconds++;
         }
 
     }

+ 6 - 0
GameClient/Assets/Game/HotUpdate/Views/LuckyBox/LuckyBoxView.cs

@@ -36,6 +36,12 @@ namespace GFGGame
             SceneController.DestroyObjectFromView(_gameObject1, _wrapper1);
             SceneController.DestroyObjectFromView(_gameObject2, _wrapper2);
             SceneController.DestroyObjectFromView(_gameObject3, _wrapper3);
+            for (int i = 0; i < _ui.m_listBg.numItems; i++)
+            {
+                UI_ComListBgItem item = UI_ComListBgItem.Proxy(_ui.m_listBg.GetChildAt(i));
+                item.m_loaBg.Dispose();
+                UI_ComListBgItem.ProxyEnd();
+            }
             if (_ui != null)
             {
                 _ui.Dispose();

+ 0 - 10
GameClient/Assets/Game/HotUpdate/Views/UIPackageManager.cs

@@ -1,10 +0,0 @@
-using System.Collections.Generic;
-
-namespace GFGGame
-{
-    public class UIPackageManager : SingletonBase<UIPackageManager>
-    {
-        private Dictionary<string, List<string>> _packageOpenViewList = new Dictionary<string, List<string>>();//每个包当前开启的界面列表
-        private Dictionary<string, long> _packageFinallyCloseTime = new Dictionary<string, long>();//包里最后一个界面关闭的时间
-    }
-}

+ 0 - 11
GameClient/Assets/Game/HotUpdate/Views/UIPackageManager.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 28f7e9731754aeb4483950496fcdcc6e
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 19 - 4
GameClient/Assets/Game/HotUpdate/Views/UIView.cs

@@ -1,4 +1,5 @@
-using FairyGUI;
+using ET;
+using FairyGUI;
 using System.Collections;
 using UnityEngine;
 
@@ -31,14 +32,23 @@ namespace GFGGame
         /// <summary>
         /// FairyGUI包名
         /// </summary>
-        protected string packageName
+        public string packageName
         {
+            get
+            {
+                return _descFilePath;
+            }
             set
             {
                 _descFilePath = ResPathUtil.GetUIPackagePath(value);
                 GFGUIPackage.AddPackage(_descFilePath);
             }
         }
+        /// <summary>
+        /// 界面关闭时间
+        /// </summary>
+        /// <value></value>
+        public long closeTime { get; set; }
 
         /// <summary>
         /// 是否显示中
@@ -113,11 +123,13 @@ namespace GFGGame
 
         public virtual void Show()
         {
-
         }
 
         public virtual void Hide()
         {
+            // UIPackageManager.Instance.RemovePackageView(_descFilePath, viewName);
+            // UIPackageManager.Instance.AddCloseTime(_descFilePath);
+            closeTime = TimeHelper.ClientNowSeconds();
             DoHideAnimation();
         }
 
@@ -209,7 +221,10 @@ namespace GFGGame
         void __removeFromStage()
         {
             OnHide();
-            Dispose();
+            if (_descFilePath == ResPathUtil.GetUIPackagePath("Login") || _descFilePath == ResPathUtil.GetUIPackagePath("Loading") || _descFilePath == ResPathUtil.GetUIPackagePath("CreateRole"))//这几个界面关闭后立即释放
+            {
+                Dispose();
+            }
         }
 
     }

+ 20 - 1
GameClient/Assets/Game/HotUpdate/Views/ViewManager.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System;
 using FairyGUI;
 using System.Linq;
+using ET;
 
 namespace GFGGame
 {
@@ -321,7 +322,23 @@ namespace GFGGame
             //     }
             // }
         }
-
+        public static void CheckDispsoe()
+        {
+            for (int i = _viewDic.Keys.Count - 1; i >= 0; i--)//不用foreach是因为:循环过程中可能会触发dispose,导致_viewDic.Keys变化,最终报错
+            {
+                int index = i > _viewDic.Keys.Count - 1 ? _viewDic.Keys.Count - 1 : i;//直接去最后一个,不用i是因为关闭一个界面可能会连带关闭其他界面,最终i比_viewDic.Keys.Count大而报错
+                KeyValuePair<string, UIView> kv = _viewDic.ElementAt(index);
+                if (kv.Value.isShowing == true) continue;
+                if (kv.Value.packageName == ResPathUtil.GetUIPackagePath("CommonGame") || kv.Value.packageName == ResPathUtil.GetUIPackagePath("Common") || kv.Value.packageName == ResPathUtil.GetUIPackagePath("Main")) return;//这几个包不释放
+                long currentTime = TimeHelper.ClientNowSeconds();
+                long closeTime = kv.Value.closeTime;
+                if (closeTime > 0 && currentTime - closeTime >= TimeUtil.SECOND_PER_MUNITE * 0.1)
+                {
+                    kv.Value.closeTime = 0;
+                    kv.Value.Dispose();
+                }
+            }
+        }
         private static object CreateViewInstance(string name)
         {
             // Debug.LogFormat("CreateViewInstance {0}", name);
@@ -371,5 +388,7 @@ namespace GFGGame
             GRoot.inst.modalLayer.alpha = alpha;
 
         }
+
+
     }
 }

+ 1 - 0
GameClient/Assets/Game/Launcher/Xasset/GFGAsset.cs

@@ -35,6 +35,7 @@ namespace GFGGame
                 if (Asset.CacheCount.TryGetValue(path, out count))
                 {
                     count--;
+                    Asset.CacheCount[path] = count;
                 }
                 if (count > 0) return;
 

+ 1 - 1
GameClient/Assets/ThirdParty/Xasset/Runtime/Loadables/Asset.cs

@@ -87,7 +87,7 @@ namespace VEngine
             }
             else
             {
-                CacheCount.Add(path, 0);
+                CacheCount.Add(path, 1);
             }
 
             if (completed != null) item.completed += completed;