视图引用成员变量和局部变量之间的区别

时间:2016-02-03 08:01:16

标签: android memory android-view local-variables member-variables

假设我有一个活动,它包含一个TextView。我可以将TextView初始化为成员变量或局部变量。这些与初始化之间存在明显差异吗?

示例: 具有本地视图参考的活动:

 public class MainActivity extends Activity{

    @OVerride
    public void onCreate(Bundle b){
       TextView textView = (TextView)findViewById(R.id.my_text_view_id);
    }
}

具有成员视图参考的活动:

 public class MainActivity extends Activity{
    TextView mTextView;

    @OVerride
    public void onCreate(Bundle b){
       mTextView = (TextView)findViewById(R.id.my_text_view_id);
    }
}

3 个答案:

答案 0 :(得分:5)

您应始终使用最小范围。因此,当您声明变量时,您应该问自己:

稍后我会在另一个函数中需要这个变量吗?

- >使用成员变量

- >使用局部变量

编辑:

还需要考虑的是创建对象的成本:

如果一个函数被重复调用,最好只将对象实例化一次,将其存储为成员变量并重复使用它,而不是每次调用该函数时都创建一个新实例。

所以第二个重要问题是:

这个函数会被调用很多,我真的需要一个存储在变量中的对象的新实例吗?

是,经常,不,我可以重复使用相同的对象 - >使用成员变量。这样就可以使用相同的内存,也不会堆积垃圾。仅用于大型数组或对象,循环中的简单int变量不需要它。

答案 1 :(得分:1)

  

一般来说,除非你有好处,否则尽量避免使用'全局'变量   理由这样做。

您可以使用本地或全局变量,具体取决于您的要求。

主要是, System.Data 是指他们在有限的范围内工作,这意味着他们在调用函数时声明,并在结束 内存之后声明该变量占用了。

最后使用全局变量会导致内存浪费。

答案 2 :(得分:1)

内存明智的全局变量更容易出现内存泄漏。任何变量的范围取决于其范围。对于局部变量,范围是关闭受尊重方法的大括号,并且在执行结束括号后自动对变量进行垃圾回收。全局变量将驻留在内存中,直到该类的任何对象在内存中。