纯粹从软件工程的角度来看,getActivity()
有多少开销?
我在整个应用程序中多次使用此方法,并考虑使用参考getActivity()
的全局变量。
让Activity
涉及的全局变量涉及到什么其他复杂情况?
我的应用只有一个activity
但很多片段。
答案 0 :(得分:2)
您真的担心过早优化。
在现代系统中,调用简单返回实例变量的方法所花费的时间是以纳秒为单位(可能不是Android设备的情况,但是,根本不需要担心)< / p>
答案 1 :(得分:2)
如果将Actvivity
存储在全局变量中,则可能存在内存泄漏的风险(特别是如果将其存储在外部类/ Fragment
中),因为我认为您将保存它在strong
引用中以传统方式。 E.g:
public MyActivity myActivity = getActivity();
虽然目前尚无最终全球协议,但最有可能的结果是当Android
尝试gc
Activity
时,它会被阻止仍然是strong
指向它的引用。
可能的解决方案是将Activity
包裹在java.lang.ref.SoftReference<T>
或java.lang.ref.WeakReference<T>
中。
E.g:
private Reference<MyActivity> activityReference = new WeakReference<>(myActivity);
当你检索它时(在外部课程/ Fragment
中)检查是否还没有gc
:
if (activityReference.get() != null) {
// still alive...
}
是的,人们这样做。
正如@Sarthak Mittal所说,只要您没有注意到应用程序中的特定开销,就不要尝试进行优化。
另外,请检查getActivity()
的代码,因为它可能只是getter
,在这种情况下,它不应承担任何重大的计算费用。