[問題] static context 的問題

看板AndroidDev作者 (!!!)時間7年前 (2017/11/07 17:07), 編輯推噓0(0031)
留言31則, 5人參與, 7年前最新討論串1/1
想請教 若 static 的view 持有 context 會有memory leak的問題 那反過來 如果一般 View 帶入 static 的 context 會有相同的問題嗎? 會因為引用 static 的 context 導致無法被回收嗎? 感謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.50.211 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1510045630.A.FED.html

11/07 17:33, 7年前 , 1F
static的Context基本上就有可能會memory leak了
11/07 17:33, 1F

11/07 17:37, 7年前 , 2F
static 最好不要用在 基本型態跟String 以外的物件
11/07 17:37, 2F

11/07 18:43, 7年前 , 3F
因為架構是一個acticity疊fragment,所以acticity基本
11/07 18:43, 3F

11/07 18:43, 7年前 , 4F
上不會死
11/07 18:43, 4F

11/07 18:44, 7年前 , 5F
所以用static方便使用,只是不確定這樣帶入toast或dia
11/07 18:44, 5F

11/07 18:44, 7年前 , 6F
log會不會有影響
11/07 18:44, 6F

11/07 18:49, 7年前 , 7F
memory leak這件事是持有別的物件的reference,會導致被參
11/07 18:49, 7F

11/07 18:49, 7年前 , 8F
照的物件不會被回收,反過來就沒有差
11/07 18:49, 8F

11/07 18:50, 7年前 , 9F
但是context只有application是static,activity即使只有一
11/07 18:50, 9F

11/07 18:50, 7年前 , 10F
個,每次系統重建也都是不同的物件,不是同一個
11/07 18:50, 10F

11/07 18:51, 7年前 , 11F
如果用static reference存activity,那在更新此reference前
11/07 18:51, 11F

11/07 18:52, 7年前 , 12F
不管被指到的activity是死是活都不會被回收,也是種leak
11/07 18:52, 12F

11/07 19:07, 7年前 , 13F
在Fragment 裡 new View(getActivity()); 就能解決原po的
11/07 19:07, 13F

11/07 19:07, 7年前 , 14F
問題 Fragment 有個 getActivity(); method 可以找父層Act
11/07 19:07, 14F

11/07 19:07, 7年前 , 15F
ivity Context
11/07 19:07, 15F

11/07 19:18, 7年前 , 16F
嗯嗯我知道,只是好奇New view(static context)的話,
11/07 19:18, 16F

11/07 19:18, 7年前 , 17F
view會因此不被回收嗎?
11/07 19:18, 17F

11/07 20:16, 7年前 , 18F
你可以用debug mode 追看看
11/07 20:16, 18F

11/07 20:21, 7年前 , 19F
我的理解是Activity lifecycle 讓 context 指向 null 而連
11/07 20:21, 19F

11/07 20:21, 7年前 , 20F
帶所有 使用的view 被指向 null 最後就是垃圾車來收垃圾了
11/07 20:21, 20F

11/07 21:06, 7年前 , 21F
不是指向null,GC是從特定root物件(如stack、static變數)出
11/07 21:06, 21F

11/07 21:07, 7年前 , 22F
發,所有能到達的物件就視為使用中,無法到達的就會被清掉
11/07 21:07, 22F

11/07 21:10, 7年前 , 23F
View裡有變數指向static物件,但View自己沒被使用中的物件
11/07 21:10, 23F

11/07 21:11, 7年前 , 24F
指到的話,還是會清掉。Activity是使用中時系統會保持一個
11/07 21:11, 24F

11/07 21:13, 7年前 , 25F
參考,在結束時會釋放,但另外有static變數指向Activity就
11/07 21:13, 25F

11/07 21:13, 7年前 , 26F
會造成系統已不用的Activity不會被清掉
11/07 21:13, 26F

11/07 21:15, 7年前 , 27F
View在沒有另外用變數存的情況下,通常指向它的只有上一層
11/07 21:15, 27F

11/07 21:16, 7年前 , 28F
的View,在被移除出View hierarchy時就可以被清掉了
11/07 21:16, 28F

11/07 21:59, 7年前 , 29F
所以context 就是一個追蹤是否連著root物件 以利於GC thre
11/07 21:59, 29F

11/07 21:59, 7年前 , 30F
ad 啟動時ㄧ起記憶體初始化 的媒介對吧?
11/07 21:59, 30F

11/11 15:29, 7年前 , 31F
不會
11/11 15:29, 31F
文章代碼(AID): #1Q0NU-_j (AndroidDev)
文章代碼(AID): #1Q0NU-_j (AndroidDev)