getActivity()开销

时间:2018-02-28 06:27:03

标签: android performance software-design

纯粹从软件工程的角度来看,getActivity()有多少开销?

我在整个应用程序中多次使用此方法,并考虑使用参考getActivity()的全局变量。

Activity涉及的全局变量涉及到什么其他复杂情况?

我的应用只有一个activity但很多片段。

2 个答案:

答案 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,在这种情况下,它不应承担任何重大的计算费用。