gpt4 book ai didi

android - 安全声明 RecyclerView 对象 : as a field of the activity or as a local variable of the onCreate() method?

转载 作者:行者123 更新时间:2023-11-29 23:21:20 25 4
gpt4 key购买 nike

初始代码:

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 会发生什么。稍后的垃圾收集会突然破坏该对象吗?

到目前为止,我在这个主题上发现的最接近的东西是: Member object instantiation in onCreate vs. during declaration ,但很遗憾,它没有触及我面临的具体问题。

我确信这件事不仅仅适用于 RecyclerView 对象,而且这种理解将帮助我在未来以及其他情况下更恰本地编写代码。

非常感谢您提供的任何说明。提前致谢!

最佳答案

I wonder what happens to recyclerView in the second version after the onCreate() method has finished executing. Would garbage collection later on suddenly destroy the object?

因为我们在这里讨论的对象是 View,它是 Activity 的“content View”的一部分,所以它只有在 >Activity作为一个整体会被销毁。

与“普通”字段不同:RecyclerView 将在后台实例化,因为您调用了 setContentView(R.layout.activity_summary); 和因此运行时将扩充布局文件。

在您的代码中,您不会实例化它,而是通过“查找”它来分配给一个变量:

RecyclerView recyclerView = findViewById(R.id.summary_recycler);

如果将变量保留在本地,可能会提高代码的可读性。但是,只有当您不需要以不止一种方法访问 RecyclerView 时才应该这样做,因为每次调用 findViewById() 时,整个 View 树将被搜索,直到找到具有匹配 id 的 View

关于android - 安全声明 RecyclerView 对象 : as a field of the activity or as a local variable of the onCreate() method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54260869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com