作者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