为所有4个Panel添加了生命周期管理
SDKManager改用协程确保依赖安全
This commit is contained in:
17
Assets/Scripts/.workbuddy/expert-history.json
Normal file
17
Assets/Scripts/.workbuddy/expert-history.json
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"sessions": {
|
||||||
|
"b51153a0b3224c0f80f1360a506ca525": [
|
||||||
|
{
|
||||||
|
"expertId": "TestResultsAnalyst",
|
||||||
|
"name": "Lyra",
|
||||||
|
"profession": "测试结果分析师",
|
||||||
|
"avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/08-QualityAssurance/TestResultsAnalyst/TestResultsAnalyst.png",
|
||||||
|
"promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/08-QualityAssurance/TestResultsAnalyst/TestResultsAnalyst_zh.md",
|
||||||
|
"usedAt": 1776104693623,
|
||||||
|
"industryId": "08-QualityAssurance"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"lastUpdated": 1776104980483
|
||||||
|
}
|
||||||
19
Assets/Scripts/.workbuddy/memory/2026-04-14.md
Normal file
19
Assets/Scripts/.workbuddy/memory/2026-04-14.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# 2026-04-14 工作日志
|
||||||
|
|
||||||
|
## SDK代码质量修复
|
||||||
|
|
||||||
|
### 完成项
|
||||||
|
1. **事件监听内存泄漏修复** - 为所有Panel添加OnDisable/OnDestroy中的监听器移除逻辑
|
||||||
|
- LoginPanel.cs
|
||||||
|
- RegisterPanel.cs
|
||||||
|
- ChangePasswordPanel.cs
|
||||||
|
- RealNameAuthPanel.cs
|
||||||
|
|
||||||
|
2. **单例初始化时序问题修复** - SDKManager改用协程确保SDKUIManager先初始化
|
||||||
|
- SDKManager.cs:Start() 改用 AutoRegisterPanelsCoroutine() 协程
|
||||||
|
- 添加最多10帧的等待和重试逻辑
|
||||||
|
|
||||||
|
### 待办
|
||||||
|
- P0: 移除敏感数据日志 (LoginPanel:473, RealNameAuthPanel:56)
|
||||||
|
- P1: 添加网络请求封装
|
||||||
|
- P2: 建立测试框架
|
||||||
0
Assets/Scripts/.workbuddy/memory/MEMORY.md
Normal file
0
Assets/Scripts/.workbuddy/memory/MEMORY.md
Normal file
@@ -28,6 +28,21 @@ namespace GameSDK
|
|||||||
backBtn.onClick.AddListener(OnBackClick);
|
backBtn.onClick.AddListener(OnBackClick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
if (!initialized) return;
|
||||||
|
initialized = false;
|
||||||
|
confirmBtn.onClick.RemoveListener(OnConfirmClick);
|
||||||
|
backBtn.onClick.RemoveListener(OnBackClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
initialized = false;
|
||||||
|
if (confirmBtn != null) confirmBtn.onClick.RemoveListener(OnConfirmClick);
|
||||||
|
if (backBtn != null) backBtn.onClick.RemoveListener(OnBackClick);
|
||||||
|
}
|
||||||
|
|
||||||
private void OnConfirmClick()
|
private void OnConfirmClick()
|
||||||
{
|
{
|
||||||
string username = usernameInput.text.Trim();
|
string username = usernameInput.text.Trim();
|
||||||
|
|||||||
@@ -451,6 +451,26 @@ namespace GameSDK
|
|||||||
if (guestLoginBtn != null) guestLoginBtn.onClick.AddListener(OnGuestLoginClick);
|
if (guestLoginBtn != null) guestLoginBtn.onClick.AddListener(OnGuestLoginClick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UnbindButtons()
|
||||||
|
{
|
||||||
|
if (!initialized) return;
|
||||||
|
initialized = false;
|
||||||
|
if (loginBtn != null) loginBtn.onClick.RemoveListener(OnLoginClick);
|
||||||
|
if (registerBtn != null) registerBtn.onClick.RemoveListener(OnRegisterClick);
|
||||||
|
if (changePasswordBtn != null) changePasswordBtn.onClick.RemoveListener(OnChangePasswordClick);
|
||||||
|
if (guestLoginBtn != null) guestLoginBtn.onClick.RemoveListener(OnGuestLoginClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
UnbindButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
UnbindButtons();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private void OnLoginClick()
|
private void OnLoginClick()
|
||||||
|
|||||||
@@ -26,6 +26,21 @@ namespace GameSDK
|
|||||||
skipBtn.onClick.AddListener(OnSkipClick);
|
skipBtn.onClick.AddListener(OnSkipClick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
if (!initialized) return;
|
||||||
|
initialized = false;
|
||||||
|
submitBtn.onClick.RemoveListener(OnSubmitClick);
|
||||||
|
skipBtn.onClick.RemoveListener(OnSkipClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
initialized = false;
|
||||||
|
if (submitBtn != null) submitBtn.onClick.RemoveListener(OnSubmitClick);
|
||||||
|
if (skipBtn != null) skipBtn.onClick.RemoveListener(OnSkipClick);
|
||||||
|
}
|
||||||
|
|
||||||
private void OnSubmitClick()
|
private void OnSubmitClick()
|
||||||
{
|
{
|
||||||
string realName = realNameInput.text.Trim();
|
string realName = realNameInput.text.Trim();
|
||||||
|
|||||||
@@ -27,6 +27,21 @@ namespace GameSDK
|
|||||||
backBtn.onClick.AddListener(OnBackClick);
|
backBtn.onClick.AddListener(OnBackClick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
if (!initialized) return;
|
||||||
|
initialized = false;
|
||||||
|
registerBtn.onClick.RemoveListener(OnRegisterClick);
|
||||||
|
backBtn.onClick.RemoveListener(OnBackClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
initialized = false;
|
||||||
|
if (registerBtn != null) registerBtn.onClick.RemoveListener(OnRegisterClick);
|
||||||
|
if (backBtn != null) backBtn.onClick.RemoveListener(OnBackClick);
|
||||||
|
}
|
||||||
|
|
||||||
private void OnRegisterClick()
|
private void OnRegisterClick()
|
||||||
{
|
{
|
||||||
string username = usernameInput.text.Trim();
|
string username = usernameInput.text.Trim();
|
||||||
|
|||||||
@@ -38,7 +38,30 @@ namespace GameSDK
|
|||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
// Start 在所有 Awake 之后执行,此时 SDKUIManager.Instance 一定已初始化
|
// 使用协程确保 SDKUIManager 单例已完全初始化
|
||||||
|
StartCoroutine(AutoRegisterPanelsCoroutine());
|
||||||
|
}
|
||||||
|
|
||||||
|
private System.Collections.IEnumerator AutoRegisterPanelsCoroutine()
|
||||||
|
{
|
||||||
|
// 等待一帧,确保所有单例初始化完成
|
||||||
|
yield return null;
|
||||||
|
|
||||||
|
// 再次检查 SDKUIManager 是否已就绪
|
||||||
|
int maxRetries = 10;
|
||||||
|
int retries = 0;
|
||||||
|
while (SDKUIManager.Instance == null && retries < maxRetries)
|
||||||
|
{
|
||||||
|
yield return null;
|
||||||
|
retries++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SDKUIManager.Instance == null)
|
||||||
|
{
|
||||||
|
Debug.LogError("[SDK] SDKUIManager 初始化失败,请检查场景配置");
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
AutoRegisterPanels();
|
AutoRegisterPanels();
|
||||||
|
|
||||||
if (autoShowLogin && panelsRegistered)
|
if (autoShowLogin && panelsRegistered)
|
||||||
|
|||||||
Reference in New Issue
Block a user