Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

Memory Leak on Navigation due to references not being removed from the HashMap

未關閉
#1,669 2 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
4/5
預估耗時
3-5 天
新手友好度
32/100
Issue 類型
缺陷
描述清晰度
基本清楚
活躍度
停滯
技術堆疊
android

研究方向

使用 @nativescript/template-drawer-navigation 重現洩漏,然後檢查 issue 中描述的 Android Studio 堆積傾印和 LeakCanary 參照。追蹤導覽期間被 HashMap 保留的 FragmentClass 實例,並驗證已清除或取代的頁面可以在不保留舊 fragment 的情況下被垃圾回收。

由索引模型根據 Issue 內容生成。

描述

Environment

  • CLI: 8.0.2
  • Cross-platform modules:
  • Android Runtime: 8.0.0
  • iOS Runtime (if applicable):
  • Plugin(s):

Describe the bug
When navigating the old fragments are still being referenced in the HashMap so the Garbage Collector doesn't collect them causing a memory leak.

When the navigation's 'clearHistory: true' the backstack is emptied properly but the memory leak remains.
When 'clearHistory: false' you can see all the old pages still in the backstack with different Id names even if they are the same page.

To Reproduce
ns create my-drawer-js --template @nativescript/template-drawer-navigation
Open up the profiler in Android Studio
Go to Memory and start a new profiling session
Navigate to a different page in the template app
Go back to profiler and Dump Java Heap
image

Click the Leaks link
image

Click the FragmentClass
image

Click the Instance
image

Click the References Tab and check the 'Show nearest GC root only' Option
image

The FragmentClass instance can't be released because of the references in the HashMap I believe.

This leak is also caught using leak canary
image

Expected behavior
Fragments should be getting completely removed from memory

Sample project
I used the most vanilla template I could to make sure issues weren't coming from frameworks or plugins
https://www.npmjs.com/package/@nativescript/template-drawer-navigation

Additional context

主要語言
C++
星號
563
分支
144
平均合併
10 小時 46 分鐘
30 天內合併 PR
14

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

NativeScript/android 的其他 Issue

查看 NativeScript/android 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。