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);