Android 安全地声明RecyclerView对象:作为活动的字段还是作为onCreate()方法的局部变量?

Android 安全地声明RecyclerView对象:作为活动的字段还是作为onCreate()方法的局部变量?,android,android-recyclerview,local-variables,member-variables,Android,Android Recyclerview,Local Variables,Member Variables,初始代码: public class SummaryActivity extends AppCompatActivity { private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.lay

初始代码:

public class SummaryActivity extends AppCompatActivity
{
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_summary);

        recyclerView = findViewById(R.id.summary_recycler);
        ...
Android Studio(v3.3)建议将
recyclerView
本地设置为
onCreate()
方法

修改代码:

public class SummaryActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_summary);

        RecyclerView recyclerView = findViewById(R.id.summary_recycler);
        ...
两个版本都运行了多次,没有发现任何差异。一个比另一个好吗?如果是,请解释一下原因好吗?我有一点想法,将
recyclerView
声明为类字段/成员更安全,但我缺乏足够的理解

我想知道
onCreate()
方法执行完毕后,第二个版本中的
recyclerView
会发生什么情况。垃圾收集以后会突然破坏对象吗

到目前为止,我在这个话题上找到的最接近的东西是: ,但遗憾的是,它没有触及我所面临的具体问题

我确信,这一问题不仅仅适用于
RecyclerView
对象,而且这种理解将有助于我在将来以及其他环境中更恰当地编码

如有任何澄清,我将不胜感激。提前谢谢

我想知道在onCreate()方法完成执行后,第二个版本中的recyclerView会发生什么情况。垃圾收集以后会突然破坏对象吗

由于我们在这里讨论的对象是
视图
,它是
活动
的“内容视图”的一部分,因此只有当
活动
作为一个整体被销毁时,它才会被销毁

与“普通”字段不同的是:
RecyclerView
将在引擎盖下实例化,因为您调用了
setContentView(R.layout.activity\u summary),因此运行时将膨胀布局文件

在代码中,您不实例化它,而是通过“查找”将其分配给变量:


如果将变量保持为局部变量,可能会提高代码的可读性。但是,只有在不需要使用多个方法访问
RecyclerView
时才应该这样做,因为每次调用
findViewById()
,将搜索整个
视图
树,直到找到具有匹配id的
视图。

如果您没有在
onCreate
之外引用您的RecyclerView,则无需为其设置成员变量。通常,最好的做法是尽可能缩小变量/方法的范围。
RecyclerView recyclerView = findViewById(R.id.summary_recycler);