两个列表进骑行释放内存

This commit is contained in:
CaiYanPeng 2021-11-16 18:41:18 +08:00
parent 3295314b7e
commit 6a4390f1b9
7 changed files with 88 additions and 32 deletions

View File

@ -15,7 +15,7 @@ using System.Timers;
public static class App public static class App
{ {
public static string Host = "http://192.168.0.101:5085/"; public static string Host = "http://192.168.0.101:5084/";
public static string AppVersion = Application.version; public static string AppVersion = Application.version;
@ -111,7 +111,7 @@ public static class App
Host = "https://wx.powerfun.com.cn/"; Host = "https://wx.powerfun.com.cn/";
UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11000); UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11000);
TcpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11001); TcpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 11001);
Debug.unityLogger.logEnabled = false; //Debug.unityLogger.logEnabled = false;
#endif #endif
var isRower = PlayerPrefs.GetString("IsRowerMode"); var isRower = PlayerPrefs.GetString("IsRowerMode");
if (!string.IsNullOrEmpty(isRower)) if (!string.IsNullOrEmpty(isRower))

View File

@ -43,8 +43,13 @@ public class MapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler,
} }
float? localY = null; float? localY = null;
MapRoute map; MapRoute map;
public void Initial(MapRoute myMap) Dictionary<string, Texture> caches;
public void Initial(MapRoute myMap, Dictionary<string, Texture> caches)
{ {
if (caches != null)
{
this.caches = caches;
}
map = myMap; map = myMap;
//localY = transform.GetComponent<RectTransform>().rect.height; //localY = transform.GetComponent<RectTransform>().rect.height;
//Debug.Log(localY); //Debug.Log(localY);
@ -122,8 +127,8 @@ public class MapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler,
transform.Find("BtnInfo").GetComponent<Button>().onClick.AddListener(Info); transform.Find("BtnInfo").GetComponent<Button>().onClick.AddListener(Info);
transform.Find("BtnRide").GetComponent<Button>().onClick.AddListener(Ride); transform.Find("BtnRide").GetComponent<Button>().onClick.AddListener(Ride);
Utils.DisplayImage(transform.Find("MapTitleImg").GetComponent<RawImage>(), myMap.CoverImage, true); Utils.DisplayImageTempDict(transform.Find("MapTitleImg").GetComponent<RawImage>(), myMap.CoverImage, this.caches);
Utils.DisplayImage(transform.Find("MapHBImg").GetComponent<RawImage>(), myMap.AltitudeGraph, true); Utils.DisplayImageTempDict(transform.Find("MapHBImg").GetComponent<RawImage>(), myMap.AltitudeGraph, this.caches);
SetActive4Button(false); SetActive4Button(false);
} }
@ -140,11 +145,11 @@ public class MapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler,
App.MainSceneParam["Name"] = "MapListPanel"; App.MainSceneParam["Name"] = "MapListPanel";
} }
SceneManager.LoadScene("Ride"); SceneManager.LoadScene("Ride");
foreach (var item in Utils.propTextureCache) //foreach (var item in Utils.propTextureCache)
{ //{
DestroyImmediate(item.Value); // DestroyImmediate(item.Value);
} //}
Utils.propTextureCache.Clear(); //Utils.propTextureCache.Clear();
} }
private void Info() private void Info()
@ -262,7 +267,7 @@ public class MapItem : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler,
AltitudeGraph = model.AltitudeGraph, AltitudeGraph = model.AltitudeGraph,
Distance = model.Distance, Distance = model.Distance,
IsFavorite = model.IsFavorite, IsFavorite = model.IsFavorite,
}); },null);
} }
public void Move(Vector3 position) public void Move(Vector3 position)

View File

@ -262,6 +262,7 @@ public class MapListController : PFUIPanel
}); });
//sortDir.GetComponent<Button>().onClick.AddListener(); //sortDir.GetComponent<Button>().onClick.AddListener();
} }
caches = new Dictionary<string, Texture>();
} }
void onEndEdit() void onEndEdit()
{ {
@ -354,6 +355,7 @@ public class MapListController : PFUIPanel
} }
} }
Dictionary<string, Texture> caches = null;
void DisplayMaps(List<MapRoute> list) void DisplayMaps(List<MapRoute> list)
{ {
if (map != null) if (map != null)
@ -361,7 +363,7 @@ public class MapListController : PFUIPanel
foreach (var item in list) foreach (var item in list)
{ {
var obj = Instantiate(map); var obj = Instantiate(map);
obj.GetComponent<MapItem>().Initial(item); obj.GetComponent<MapItem>().Initial(item, caches);
//obj.SendMessage("Initial", ); //obj.SendMessage("Initial", );
obj.transform.SetParent(content.transform); obj.transform.SetParent(content.transform);
obj.transform.localScale = new Vector3(1, 1, 1); obj.transform.localScale = new Vector3(1, 1, 1);
@ -468,4 +470,12 @@ public class MapListController : PFUIPanel
ResetPanel(); ResetPanel();
transform.MyDOFade(); transform.MyDOFade();
} }
protected override void OnDestroy()
{
caches = null;
Resources.UnloadUnusedAssets();
GC.Collect();
Debug.Log("list empty");
}
} }

View File

@ -40,6 +40,10 @@ public class RaceItemScript : MonoBehaviour, IPointerExitHandler, IPointerEnterH
} }
public void Initial(MapCompetition mapCompetition,Transform parent,string from = "list") public void Initial(MapCompetition mapCompetition,Transform parent,string from = "list")
{ {
if (parent != null)
{
this.parent = parent;
}
transform.GetComponent<Button>().onClick.RemoveAllListeners(); transform.GetComponent<Button>().onClick.RemoveAllListeners();
#if !(UNITY_ANDROID || UNITY_IOS) #if !(UNITY_ANDROID || UNITY_IOS)
transform.GetComponent<Button>().onClick.AddListener(() => transform.GetComponent<Button>().onClick.AddListener(() =>
@ -48,7 +52,7 @@ public class RaceItemScript : MonoBehaviour, IPointerExitHandler, IPointerEnterH
App.CompetionId = mapCompetition.Id; App.CompetionId = mapCompetition.Id;
SceneManager.LoadScene("Ride"); SceneManager.LoadScene("Ride");
}); });
Utils.DisplayImage(transform.GetComponent<RawImage>(), mapCompetition.RouteCover, true); Utils.DisplayImageTempDict(transform.GetComponent<RawImage>(), mapCompetition.RouteCover, this.parent.GetComponent<RaceScript>().caches);
#else #else
if (string.IsNullOrEmpty(_from)) if (string.IsNullOrEmpty(_from))
{ {
@ -56,14 +60,14 @@ public class RaceItemScript : MonoBehaviour, IPointerExitHandler, IPointerEnterH
} }
if (_from == "list") if (_from == "list")
{ {
Utils.DisplayImage(transform.GetComponent<RawImage>(), mapCompetition.RouteCover, true); Utils.DisplayImageTempDict(transform.GetComponent<RawImage>(), mapCompetition.RouteCover, this.parent.GetComponent<RaceScript>().caches);
transform.GetComponent<Button>().onClick.AddListener(() => transform.GetComponent<Button>().onClick.AddListener(() =>
{ {
UIManager.ShowRaceDetailModal(transform,mapCompetition); UIManager.ShowRaceDetailModal(transform,mapCompetition);
}); });
} }
#endif #endif
Utils.DisplayImage(transform.Find("AltitudeCurve").GetComponent<RawImage>(), mapCompetition.AltitudeGraph, true); Utils.DisplayImageTempDict(transform.Find("AltitudeCurve").GetComponent<RawImage>(), mapCompetition.AltitudeGraph, this.parent.GetComponent<RaceScript>().caches);
transform.Find("InfoContainer/Text").GetComponent<Text>().SetTextWithEllipsis(mapCompetition.Title); transform.Find("InfoContainer/Text").GetComponent<Text>().SetTextWithEllipsis(mapCompetition.Title);
transform.Find("GetReadyContainer").gameObject.SetActive(mapCompetition.Status != 4); transform.Find("GetReadyContainer").gameObject.SetActive(mapCompetition.Status != 4);
transform.Find("GetReadyContainer-2").gameObject.SetActive(mapCompetition.Status == 1); transform.Find("GetReadyContainer-2").gameObject.SetActive(mapCompetition.Status == 1);
@ -91,10 +95,7 @@ public class RaceItemScript : MonoBehaviour, IPointerExitHandler, IPointerEnterH
SetButtonGroup(mapCompetition); SetButtonGroup(mapCompetition);
} }
#endif #endif
if (parent != null)
{
this.parent = parent;
}
this.mapCompetition = mapCompetition; this.mapCompetition = mapCompetition;
} }

View File

@ -1,5 +1,6 @@
using Assets.Scripts; using Assets.Scripts;
using DG.Tweening; using DG.Tweening;
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
@ -10,6 +11,8 @@ public class RaceScript : PFUIPanel
// Start is called before the first frame update // Start is called before the first frame update
protected Transform currentItem { get; set; } protected Transform currentItem { get; set; }
IEnumerator _timer { get; set; } IEnumerator _timer { get; set; }
public Dictionary<string, Texture> caches { get; set; }
public override void Show() public override void Show()
{ {
base.Show(); base.Show();
@ -71,7 +74,6 @@ public class RaceScript : PFUIPanel
while (true) while (true)
{ {
yield return new WaitForSeconds(1.0f); // yield return new WaitForSeconds(1.0f); //
Debug.Log(123);
HandleTime(); HandleTime();
//time = UIManager.Now.GetDateTime().AddSeconds(1); //time = UIManager.Now.GetDateTime().AddSeconds(1);
} }
@ -138,8 +140,10 @@ public class RaceScript : PFUIPanel
} }
} }
void Awake() protected override void Awake()
{ {
base.Awake();
caches = new Dictionary<string, Texture>();
if (_timer == null) if (_timer == null)
{ {
_timer = Timer(); _timer = Timer();
@ -151,4 +155,12 @@ public class RaceScript : PFUIPanel
{ {
} }
protected override void OnDestroy()
{
caches = null;
Resources.UnloadUnusedAssets();
GC.Collect();
Debug.Log("list empty");
}
} }

View File

@ -309,7 +309,7 @@ namespace Assets.Scripts
/*显示网络图片*/ /*显示网络图片*/
public static Dictionary<string, Texture> propTextureCache = new Dictionary<string, Texture>(); public static Dictionary<string, Texture> propTextureCache = new Dictionary<string, Texture>();
public delegate Coroutine StartCoroutine(IEnumerator routine); public delegate Coroutine StartCoroutine(IEnumerator routine);
public static void DisplayImage(RawImage img, string url, bool cache = false) public static void DisplayImage(RawImage img, string url, bool cache = false,Dictionary<string,Texture> caches = null)
{ {
if (string.IsNullOrEmpty(url)) if (string.IsNullOrEmpty(url))
return; return;
@ -332,12 +332,38 @@ namespace Assets.Scripts
} }
} }
UIManager.Instance.StartCoroutine(DownloadImage(img, url,(texture)=> { UIManager.Instance.StartCoroutine(DownloadImage(img, url,(texture)=> {
if (cache && !propTextureCache.ContainsKey(url)) //if (cache && !propTextureCache.ContainsKey(url))
{ //{
propTextureCache.Add(url, texture); // propTextureCache.Add(url, texture);
} //}
})); }));
}
/// <summary>
/// 使用临时字典存放图片,切换页面后清除
/// </summary>
/// <param name="img"></param>
/// <param name="url"></param>
/// <param name="caches"></param>
public static void DisplayImageTempDict(RawImage img, string url, Dictionary<string, Texture> caches = null)
{
if (string.IsNullOrEmpty(url))
return;
if (caches!=null)
{
if (caches.ContainsKey(url))
{
img.texture = caches[url];
return;
}
}
UIManager.Instance.StartCoroutine(DownloadImage(img, url, (texture) => {
if (caches != null && !caches.ContainsKey(url))
{
caches.Add(url, texture);
}
}));
} }
public static void DisplayImageAysnc(StartCoroutine startCoroutine, RawImage img, string url,Action<string> action) public static void DisplayImageAysnc(StartCoroutine startCoroutine, RawImage img, string url,Action<string> action)
@ -349,13 +375,15 @@ namespace Assets.Scripts
static IEnumerator DownloadImage(RawImage img,string MediaUrl, Action<Texture> action = null) static IEnumerator DownloadImage(RawImage img,string MediaUrl, Action<Texture> action = null)
{ {
UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl); UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl,true);
yield return request.SendWebRequest(); yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError) if (request.isNetworkError || request.isHttpError)
Debug.Log(request.error); Debug.Log(request.error);
else if(img!=null) else if(img!=null)
{ {
img.texture = ((DownloadHandlerTexture)request.downloadHandler).texture; var _t = ((DownloadHandlerTexture)request.downloadHandler).texture;
_t.name = MediaUrl;
img.texture = _t;
if (action != null) if (action != null)
{ {
action.Invoke(img.texture); action.Invoke(img.texture);
@ -365,7 +393,7 @@ namespace Assets.Scripts
static IEnumerator DownloadImageCallBack(RawImage img, string MediaUrl,Action<string> action) static IEnumerator DownloadImageCallBack(RawImage img, string MediaUrl,Action<string> action)
{ {
UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl); UnityWebRequest request = UnityWebRequestTexture.GetTexture(MediaUrl, true);
yield return request.SendWebRequest(); yield return request.SendWebRequest();
if (request.isNetworkError || request.isHttpError) if (request.isNetworkError || request.isHttpError)
Debug.Log(request.error); Debug.Log(request.error);

View File

@ -179,7 +179,7 @@ PlayerSettings:
applicationIdentifier: applicationIdentifier:
Android: com.ZhiXingPai.PowerFunUnity Android: com.ZhiXingPai.PowerFunUnity
buildNumber: buildNumber:
iPhone: 2.0.5.0 iPhone: 2.0.6.2
AndroidBundleVersionCode: 8 AndroidBundleVersionCode: 8
AndroidMinSdkVersion: 24 AndroidMinSdkVersion: 24
AndroidTargetSdkVersion: 30 AndroidTargetSdkVersion: 30
@ -256,7 +256,7 @@ PlayerSettings:
clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea
templatePackageId: com.unity.template.3d@4.2.8 templatePackageId: com.unity.template.3d@4.2.8
templateDefaultScene: Assets/Scenes/SampleScene.unity templateDefaultScene: Assets/Scenes/SampleScene.unity
AndroidTargetArchitectures: 3 AndroidTargetArchitectures: 1
AndroidSplashScreenScale: 0 AndroidSplashScreenScale: 0
androidSplashScreen: {fileID: 0} androidSplashScreen: {fileID: 0}
AndroidKeystoreName: '{inproject}: Assets/Plugins/Android/powerfun.keystore' AndroidKeystoreName: '{inproject}: Assets/Plugins/Android/powerfun.keystore'
@ -868,7 +868,7 @@ PlayerSettings:
platformArchitecture: platformArchitecture:
iPhone: 1 iPhone: 1
scriptingBackend: scriptingBackend:
Android: 1 Android: 0
Standalone: 0 Standalone: 0
il2cppCompilerConfiguration: il2cppCompilerConfiguration:
Standalone: 0 Standalone: 0