public ContactsPanel(Activity activity,GoogleMap mGoogleMap)
我有一个带有此构造函数的类。这个课程基本上会夸大UI
"活动"在mGoogleMaps
上单击标记时使用标记详细信息。我对社区的问题是:
如果我正在创建ContactsPanel
的第一个实例,那么我是否强制操作系统重复对象活动和mGoogleMap
的内存分配?
如果我有10个ContactsPanel
个实例怎么办?这是指内存中的10个Google地图和内存中的10个活动吗?或者所有对象都将引用最初创建的同一个对象?
谢谢!
答案 0 :(得分:2)
不,您不会复制作为参数传递的activity
或googleMaps
或任何其他Ojects
的实例。
创建实例后,它将存储在内存位置X的堆中,当您调用ContactPanel(activity,mGoogleMap)
时,会在堆中的位置Y创建ContactsPanel
的新实例,并且变量{{1 } activity
内的mGoogleMaps
仍然指向堆中的X.
修改强>
要回答关于缺点的问题,如果您对单个重型ContactPanel
实例有N
个修饰符,那么确定但问题是内存泄漏,
考虑你与10个对象共享你的object
实例,现在即使你完成了activity
,但是你的10个对象中有一个仍然存在于内存中,它不会让{{1}收集活动的记忆。
答案 1 :(得分:0)
你可以在你的构造函数中传递活动和映射,它只会传递引用,它不会复制任何对象。
所以你可以说所有对象引用同一个对象。
答案 2 :(得分:0)
我认为您可以使用WeakReference<>
获取Activity
或Object
的实例并使用
class ExampleWeakReference {
private WeakReference<DashboardActivity> mActivityWeakReference;
ExampleWeakReference(DashboardActivity activity) {
mActivityWeakReference = new WeakReference<DashboardActivity>(activity);
}
private void doSomethingWithId() {
DashboardActivity dashboardActivity = mActivityWeakReference.get();
dashboardActivity.mToolbar.setBackgroundColor(Color.RED);
}
}