getActivity() 开销

getActivity() overhead

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

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

Activity 的全局变量会带来哪些其他并发症?

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

你真的担心过早的优化。

在现代系统中,调用一个简单 returns 实例变量的方法所花费的时间以纳秒为单位(在 android 设备的情况下可能不是,但仍然不是有什么好担心的)

如果您将 Actvivity 存储在全局变量中,您可能会面临内存泄漏的风险(特别是如果您将其存储在外部 类 / Fragment 中),我想你我们将以传统方式将其保存在 strong 参考中。例如:

public MyActivity myActivity = getActivity();

虽然还没有就此达成最终的全球协议,但最有可能的结果是,当 Android 尝试 gc Activity 时,它将被阻止,因为那里仍然有 strong 个指向它的引用。

一个可能的解决方案是将您的 Activity 包装在 java.lang.ref.SoftReference<T>java.lang.ref.WeakReference<T> 中。

例如:

private Reference<MyActivity> activityReference = new WeakReference<>(myActivity);

当您检索它时(在外部 类 / Fragments 中)检查是否还没有 gc

if (activityReference.get() != null) {
    // still alive...
}

是的,人们会那样做。


正如@Sarthak Mittal 所说,只要您没有注意到应用程序中的特定开销,就不要尝试优化。

另外,检查 getActivity() 的代码,因为它可能只是一个 getter,在这种情况下,它不应该带来任何显着的计算开销。