纯粹从软件工程的角度来看,getActivity()
有多少开销?
我在整个应用程序中多次使用此方法,并考虑使用参考getActivity()
的全局变量。
通过使Activity
的全局变量涉及到其他并发症会是什么?
我的应用程序只有一个activity
但很多片段。
如果将Actvivity
存储在全局变量中,则可能存在内存泄漏的风险(特别是如果将其存储在外部类/ Fragment
中),因为我认为您将在strong
引用中以传统方式保存它。例如:
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
s)检查是否还没有gc
:
if (activityReference.get() != null) {
// still alive...
}
是的,人们这样做。
正如@Sarthak Mittal所说,只要您没有注意到应用程序中的特定开销,就不要尝试进行优化。
另外,检查getActivity()
的代码,因为它可能只是一个getter
,在这种情况下,它不应该带来任何重大的计算费用。
你真的担心过早优化。
在现代系统中,调用简单返回实例变量的方法所花费的时间是以纳秒为单位(可能不是在Android设备的情况下,但仍然不需要担心)