Android 是否将视图对象层次结构保留在内存中?
Does Android keep the view object hierarchy in memory?
当我创建一个按钮时:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout layout = …;
Button btn = new Button(this);
btn.setText("My Button");
layout.addView(btn);
}
如果我不保留对 btn
的强引用,Android 是否使 btn
实例保持活动状态?
例如,layout.getChildView(0)
return 是确切的实例 (btn
) 吗?还是 Android 创建并 return Button
和 return 的新实例?
我不是在谈论子类化(例如 class MyButton extends Button
),我认为很明显它必须保存在内存中,我只是在询问内置视图 类.
对于任何视图组,当您一次添加任何子视图时,它不会创建新实例。
ViewGroup 将对其子项的强引用存储在一个数组中。如果查看 ViewGroup 来源,您会发现以下字段:
private View[] mChildren;
当您调用 getChildAt
时,您会从这个数组中获得一个实例:
public View getChildAt(int index) {
if (index < 0 || index >= mChildrenCount) {
return null;
}
return mChildren[index];
}
当我创建一个按钮时:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout layout = …;
Button btn = new Button(this);
btn.setText("My Button");
layout.addView(btn);
}
如果我不保留对 btn
的强引用,Android 是否使 btn
实例保持活动状态?
例如,layout.getChildView(0)
return 是确切的实例 (btn
) 吗?还是 Android 创建并 return Button
和 return 的新实例?
我不是在谈论子类化(例如 class MyButton extends Button
),我认为很明显它必须保存在内存中,我只是在询问内置视图 类.
对于任何视图组,当您一次添加任何子视图时,它不会创建新实例。
ViewGroup 将对其子项的强引用存储在一个数组中。如果查看 ViewGroup 来源,您会发现以下字段:
private View[] mChildren;
当您调用 getChildAt
时,您会从这个数组中获得一个实例:
public View getChildAt(int index) {
if (index < 0 || index >= mChildrenCount) {
return null;
}
return mChildren[index];
}