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);
当您检索它时(在外部 类 / Fragment
s 中)检查是否还没有 gc
:
if (activityReference.get() != null) {
// still alive...
}
是的,人们会那样做。
正如@Sarthak Mittal 所说,只要您没有注意到应用程序中的特定开销,就不要尝试优化。
另外,检查 getActivity()
的代码,因为它可能只是一个 getter
,在这种情况下,它不应该带来任何显着的计算开销。
纯粹从软件工程的角度来看,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);
当您检索它时(在外部 类 / Fragment
s 中)检查是否还没有 gc
:
if (activityReference.get() != null) {
// still alive...
}
是的,人们会那样做。
正如@Sarthak Mittal 所说,只要您没有注意到应用程序中的特定开销,就不要尝试优化。
另外,检查 getActivity()
的代码,因为它可能只是一个 getter
,在这种情况下,它不应该带来任何显着的计算开销。