Я все еще новичок в Java и Android.
Недавно я наткнулся на видео на YouTube, в котором предлагалось не использовать «this», когда в качестве параметра задан контекст. (: https://www.youtube.com/watch?v=gz7acZGaXoc&list=PLfuE3hOAeWhYlesGCkCU7xa4_SIfpLCgT&index=4)
И ... все это казалось хорошим и разумным. Но я не совсем уверен.
Я начал изучать курсы Udacity, и они (насколько мне известно) всегда использовали «this» в качестве ключевого слова для получения текущего контекста. Например:
ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, numberList);
ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(itemsAdapter);
И это тоже кажется разумным. Поскольку, когда вы занимаетесь какой-либо деятельностью, вам не обязательно понимать контекст приложения.
Как я понимаю, сборщик мусора в Java не уловил бы то, на что ссылается, и когда (с первого youtuber) вы поворачиваете экран - создаете новый экземпляр - новое действие фактически запускается без сбора старого. Ведущий к утечке.
/ getApplicationContext (), вероятно, не будет хорошим выбором для запуска ListView, но для экспериментов и для другого теста ... /
Итак, я начал эксперимент, не поворачивая экран, но ... вместо этого я просто открыл бы / новое действие с помощью явного намерения, возврата, повтора, возврата, повтора и т. Д. Тем временем я бы запустил ADB и посмотрите на использование памяти.
В обоих случаях может показаться, что они немного просачиваются (увеличиваются на 1 МБ после +/- 10 щелчков). Это будет увеличиваться волнообразно: начало (в точке y), открытие (переход к x), назад (переход к y + 1), открытие (переход к x + 1), назад (переход к y + 1 + 1) ) и т. д.
Итак, я хотел спросить: это из-за частичного повторного использования контекста? Или здесь есть что-то еще? Но перед этим я решил вернуться к полному основам, удалить часть кода и просто явно открыть новое действие, вернуться назад, открыть и т. Д. Тот же результат.
Теперь, чтобы проверить немного дальше, я переместил приложение в фоновый режим, нажав home, снова открыв его, вернув в фон и т. Д. ... И здесь тоже перезапуски.
В конце концов у меня возник вопрос: это нормально? Или ... чтобы быть более точным. Почему монитор говорит, что утечка небольшого объема памяти? Это также может быть не утечка в приложении, но в той части контракта, которая была заключена для мониторинга этого?
И, если, в случае, если это действительно утечка, почему? Является ли это частью коллектора, и мы должны жить с этим?.
Примечание: мой телефон работает с SDK <25. </p>
Остальной код: Основной:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView NumbersList = (TextView) findViewById(numbers);
NumbersList.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent numbersIntent = new Intent(MainActivity.this, NumbersActivity.class);
startActivity(numbersIntent);
}
});
Остальной код: Активность:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_numbers);