Android 是不是将视图对象层次结构保留在内存中?
Posted
技术标签:
【中文标题】Android 是不是将视图对象层次结构保留在内存中?【英文标题】:Does Android keep the view object hierarchy in memory?Android 是否将视图对象层次结构保留在内存中? 【发布时间】:2020-03-19 08:28:33 【问题描述】:当我创建一个按钮时:
@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)
是否返回确切的实例 (btn
)?还是 Android 创建并返回 Button
的新实例并返回它?
我不是在谈论子类化(例如class MyButton extends Button
),我认为它显然必须保存在内存中,我只是在询问内置视图类。
【问题讨论】:
【参考方案1】:ViewGroup 将对其子项的强引用存储在一个数组中。如果您查看 ViewGroup 来源,您会发现以下字段:
private View[] mChildren;
当你调用 getChildAt
时,你会从这个数组中得到一个实例:
public View getChildAt(int index)
if (index < 0 || index >= mChildrenCount)
return null;
return mChildren[index];
【讨论】:
【参考方案2】:对于任何视图组,当您一次添加任何子视图时,它不会创建新实例。
【讨论】:
对不起,我不明白。什么意思? 它不会创建新实例,假设您已将一个 textview 添加到任何视图组,然后如果您更新 textview,它将反映。所以这意味着它是引用,而不是创建新实例。 但是如果您添加的 textview 没有反映他们的更改,那么我们可以说它正在创建新实例。 谢谢,但这不是我要问的。 要求什么??抱歉,我无法理解,以上是关于Android 是不是将视图对象层次结构保留在内存中?的主要内容,如果未能解决你的问题,请参考以下文章