當我點擊通過我的應用程序導航,我覺得Android是每個我推出新的意向時創建活動的新實例(使用下面的代碼):根據我讀過這是什麼應該在內存分析器中顯示Android活動的多個實例嗎?
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
似乎是默認行爲。我會猜到這意味着堆現在將分配多個實例來維護應用程序的歷史記錄。然而Patrick Dubroy在他的video on Memory management中說,除非存在內存泄漏,否則只有一個活動的實例應該顯示在堆轉儲中。
我的問題是雙重的:我是否更正每次啓動意圖時都會創建一個新的活動實例?如果是這樣,在堆轉儲中出現多個實例是否表明存在內存泄漏?
更新 基於the Tasks and Back Stack guide:
因爲在後面堆棧中的活動永遠不會重新排列,如果您的應用程序允許用戶從一個以上活動的一個新的實例啓動特定活動活動被創建並被推入堆棧(而不是將任何先前的活動實例置頂)。
Intent intent = new Intent(this, HomeActivity.class); startActivity(intent);
那麼,事實上,Android將創建:因此,在應用程序中一個活動可能如果在你的應用程序,你這樣做是多次實例化(甚至從不同的任務)
您有泄漏,您可能會持有一個引用自身引用活動上下文的引用,例如,您在活動中創建的位圖以及其他位置的引用。如果你這樣做,你會泄漏整個活動。 Android不會爲您的活動創建2個實例。 – Simon
當你說「Android不會創建你的活動的2個實例」時,你真正的意思是什麼?因爲唯一的方式就是內存泄漏,如果Android正在創建另一個實例(否則保持引用不會有問題)。你真正說的是我的第一個實例應該被銷燬? – Shawn
我剛測試過一個全新的應用程序。沒有引用,沒有位圖,除了「Hello world」文本之外的活動中沒有任何內容。在兩次空白活動之間來回切換幾次之後,堆轉儲會爲每個活動顯示多個對象,根據Patrick的視頻所說,這對我來說非常混亂。 – Shawn