PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
AndroidDev
[问题] static context 的问题
楼主:
minesos520
(!!!)
2017-11-07 17:07:05
想请教
若 static 的view 持有 context
会有memory leak的问题
那反过来
如果一般 View 带入 static 的 context
会有相同的问题吗?
会因为引用 static 的 context
导致无法被回收吗?
感谢!
作者:
ab18282099
(poppopjack)
2017-11-07 17:33:00
static的Context基本上就有可能会memory leak了
作者: lnmlee
2017-11-07 17:37:00
static 最好不要用在 基本型态跟String 以外的物件
楼主:
minesos520
(!!!)
2017-11-07 18:43:00
因为架构是一个acticity叠fragment,所以acticity基本上不会死所以用static方便使用,只是不确定这样带入toast或dialog会不会有影响
作者:
ssccg
(23)
2017-11-07 18:49:00
memory leak这件事是持有别的物件的reference,会导致被参照的物件不会被回收,反过来就没有差但是context只有application是static,activity即使只有一个,每次系统重建也都是不同的物件,不是同一个如果用static reference存activity,那在更新此reference前不管被指到的activity是死是活都不会被回收,也是种leak
作者: lnmlee
2017-11-07 19:07:00
在Fragment 里 new View(getActivity()); 就能解决原po的问题 Fragment 有个 getActivity(); method 可以找父层Activity Context
楼主:
minesos520
(!!!)
2017-11-07 19:18:00
嗯嗯我知道,只是好奇New view(static context)的话,view会因此不被回收吗?
作者: lnmlee
2017-11-07 20:16:00
你可以用debug mode 追看看我的理解是Activity lifecycle 让 context 指向 null 而连带所有 使用的view 被指向 null 最后就是垃圾车来收垃圾了
作者:
ssccg
(23)
2017-11-07 21:06:00
不是指向null,GC是从特定root物件(如stack、static变量)出发,所有能到达的物件就视为使用中,无法到达的就会被清掉View里有变量指向static物件,但View自己没被使用中的物件指到的话,还是会清掉。Activity是使用中时系统会保持一个参考,在结束时会释放,但另外有static变量指向Activity就会造成系统已不用的Activity不会被清掉View在没有另外用变量存的情况下,通常指向它的只有上一层的View,在被移除出View hierarchy时就可以被清掉了
作者: lnmlee
2017-11-07 21:59:00
所以context 就是一个追踪是否连着root物件 以利于GC thread 启动时ㄧ起内存初始化 的媒介对吧?
作者: twntwn
2017-11-11 15:29:00
不会
继续阅读
[问题] Android Studio Project档案太大
XperiaZ6C
[问题] 自订 Account Type 问题
darkk6
[问题] 降低模拟器的cpu效能
JackChena
[分享] Android Studio 3 新功能 !!!
romantic1027
[问题] Java用在写Android占几成?
dharma
[问题] 当有多个Fragment在运作时如何传递资料
lkkpeter
[问题] Firebase如何防堵作弊
taco2548
[问题] 推荐系统app
shan826
[问题] andriod studio 更新到3.0之后 R出现红字
w0806x
[问题] firebase service 接收讯息 常驻
lazior
Links
booklink
Contact Us: admin [ a t ] ucptt.com