【问题标题】: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),我认为它显然必须保存在内存中,我只是在询问内置视图类。

【问题讨论】:

    标签: android performance android-layout memory android-memory


    【解决方案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 没有反映他们的更改,那么我们可以说它正在创建新实例。
      • 谢谢,但这不是我要问的。
      • 要求什么??抱歉,我无法理解,
      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 2016-09-07
      • 1970-01-01
      相关资源
      最近更新 更多