Запутался в скоупах

Есть вот такой код активности.

public class MainActivity extends AppCompatActivity {
  private final Random random = new Random();

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

    RecyclerView items = findViewById(R.id.items);
    ColorAdapter adapter = new ColorAdapter(getLayoutInflater());

    adapter.submitList(buildItems());
    items.setLayoutManager(new LinearLayoutManager(this));
    items.addItemDecoration(
      new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
    items.setAdapter(adapter);
  }

  private List<Integer> buildItems() {
    ArrayList<Integer> result = new ArrayList<>(25);

    for (int i = 0; i < 25; i++) {
      result.add(random.nextInt());
    }

    return result;
  }
}

Возьмем к примеру RecyclerView items = findViewById(R.id.items);

Этот вью объявлен внутри метода OnCreate, соответственно, является локальной переменной и по окончании работы метода должен быть уничтожен сборщиком мусора.

Но этого не происходит. Почему?

В моем понимании, этот вью появится в момент вызова OnCreate() и сразу будет уничтожен после вызова. И было бы правильно вынести эту переменную в глобальную область видимости (объявить вне метода, а в OnCreate только инициализировать).

Я не прав?


Ответы (0 шт):