作者tryagainloop (TRyagain)
看板AndroidDev
標題Re: [問題] 不同context存在時 使用上會有問題嗎?
時間Mon Feb 18 19:03:00 2013
※ 引述《popcorny (畢業了..@@")》之銘言:
: ※ 引述《issuemylove (skill)》之銘言:
: 原則上是沒問題..
: 因為Activity是繼承於ContextWrapper
: 他會把這些getResources的bypass給base context..
: 但是以你的應用
: 我猜C是singleton?
: 我會建議C會這樣寫
: private C(Context context){
: this.mContext = context.getApplicationContext();
: }
: 這樣對mContext不會是Activity
: 而會是application object..
: 或是你直接定義一個Application subclass
: 並且讓他也定義Singleton object
: 然後context直接使用這個singleton appllication object
請問 如果我在 C 裡強制cast 這樣使用 A 會有什麼壞處??
雖然很好用可是感覺哪邊有洞在等我跳
ActivityA act = ((ActivityA) mContext);
這樣在切換 activity 時 Activity A 會被系統回收掉嗎
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.198.95
1F:→ popcorny:為什麼會有這樣的需求? 02/18 19:25
2F:→ tryagainloop:還不太會切換activity 所以把所有物件都掛在 A上 02/19 10:12
3F:→ tryagainloop:在需要使用到 activity 上的物件的時候直接抓來用 02/19 10:13
4F:推 MetalChao:mContext 是 application object, 不是 A 的 object 02/19 10:37
5F:→ MetalChao:強制cast並沒有任何意義; mContext 本身就是 A, 也不需 02/19 10:38
6F:→ MetalChao:要強制cast, 但雖然 A 的 object 不會被GC, 可是 A 如果 02/19 10:39
7F:→ MetalChao:已經 finish, 也無法再重新 onCreate, 意義不大, 如果 02/19 10:39
8F:→ MetalChao:在A finish 後仍需要存取的資料, 就不屬於A的範圍, 應該 02/19 10:40
9F:→ MetalChao:放在其他global的地方(如 application, database, etc) 02/19 10:40
10F:→ MetalChao:註:第二行是說"如果"mContext本身就是A (不採用popcorny 02/19 10:41
11F:→ MetalChao:大的作法的話) 02/19 10:41
感謝M大回覆
如果說我在 A 中 new 出一個 object AppMgr
我只要在其他 static object 去指向這個 AppMgr
public static AppMgr mgr = ((ActivityA) mContext).mgr;
即使 A 被 finish
還是可以經由 static object 去讀取 AppMgr ??
不知道會被會因為 AppMgr 是在 A 中 new 出來的 造成 ActivityA 在GC 的時候 memory leak
※ 編輯: tryagainloop 來自: 118.160.198.95 (02/19 14:27)
12F:推 MetalChao:你的 mgr 這個 static 變數已經指向 這個 AppMgr obj了 02/19 17:04
13F:→ MetalChao:有人指向它(尤其還是個 static 變數), 不管A發生什麼事 02/19 17:04
14F:→ MetalChao:這個 object 就不會被 GC 02/19 17:04
15F:→ MetalChao:但如果你在意的是 memory leak, 也就是東西該清掉而沒被 02/19 17:06
16F:→ MetalChao:清, 那麼你得自己考慮mgr所指向的這個物件, 是否在某些 02/19 17:07
17F:→ MetalChao:時候應該被清掉, 就要去設 mgr = null; 不然 static 02/19 17:07
18F:→ MetalChao:變數所指到的物件, 在這個JVM的生命週期中都會存在 02/19 17:07
19F:→ MetalChao:不過我是針對你的code來說, 實際情況 mgr 是否該放在A 02/19 17:08
20F:→ MetalChao:還有 mgr 是否該是一個 static 變數, 都要看情形 02/19 17:08
21F:→ tryagainloop:感謝M大的講解 一直以來的疑問解決了 02/19 18:07