Android:将视图作为全局变量存储在类中是一种好的做法吗?

Android:将视图作为全局变量存储在类中是一种好的做法吗?,android,performance,Android,Performance,我是Android新手,一直在读到内存管理在那些内存有限的应用程序中非常重要 我读过一些文章,其中活动的findViewById()非常昂贵。所以我想知道,将视图存储为全局变量并重用对象是否是一种好的做法?还是每次需要使用视图时都运行findViewById()更好 谢谢, Kev将其存储为类的私有成员对于您将多次使用的内容来说是典型的。指向这样一个对象的指针。是很小的。如果你的意思是全局变量的静态变量,那么永远不要这样做如果将视图保留为静态变量,则保存视图的活动将泄漏 您在屏幕上看到的所有视图

我是Android新手,一直在读到内存管理在那些内存有限的应用程序中非常重要

我读过一些文章,其中活动的
findViewById()
非常昂贵。所以我想知道,将视图存储为全局变量并重用对象是否是一种好的做法?还是每次需要使用视图时都运行
findViewById()
更好

谢谢,
Kev

将其存储为类的私有成员对于您将多次使用的内容来说是典型的。指向这样一个对象的指针。是很小的。

如果你的意思是
全局变量的
静态变量,那么永远不要这样做如果将视图保留为静态变量,则保存视图的活动将泄漏

您在屏幕上看到的所有视图都附加到某个活动,并且它们包含对该活动的引用,如果您保留对其中一个视图的静态引用,则在活动终止时,该活动将永远不会被垃圾收集(通过按BACK键或调用活动上的
finish()
方法)

至于
findViewById()
,我认为您不需要太在意它的性能,它可能会暴露一些开销,但它只是相对来说昂贵,对于大多数应用程序来说速度足够快。

当您说“将视图存储为全局变量”时,我想您的意思是“将对视图的引用保留为活动类中的私有属性”。就内存而言,这不应该是一个问题:保留对视图的附加引用并不意味着将整个对象再次存储在内存中

您必须记住的是,如果您保留对对象的引用,即使不再需要它,垃圾收集器也无法从内存中清除它。但是,由于您的视图可能不应该在您的活动被销毁之前被销毁,因此在activity类中保留对它的引用不应该导致内存泄漏


简而言之:如果您需要在活动类中频繁访问视图,我会说这是一种很好的做法。至少我是这样做的,所以如果有人不同意,我很想知道原因。

是的,最好将视图作为活动的成员变量。(在java中没有全局变量,在类中声明的变量称为成员变量)


这样的陈述值得一些推理。为什么更好?它总是正确的吗?正如问题本身所述,当您将findViewByid与仅读取成员变量进行比较时,findViewByid是一个更昂贵的操作。由于您将在多个位置使用视图的实例,因此最好将其设置为成员变量。(绝对不是静态的,因为它泄露了整个上下文)
public MyActivity extends Activity{
    private View mView;

    public void onCreate(Bundle savedState){
        super.onCreate(savedState);
        setContentView(layout);
        mView = findViewById(id);
    }
}