Публикация MainThread Runnables Memory Leak Safe Android

У меня вопрос по утечкам памяти. У меня есть анонимный класс ниже. Как вы, возможно, знаете, анонимный класс содержит ссылку из внешнего объекта (здесь Activity). Этот код вызывает утечку памяти или нет? В случае ориентации это будет удерживать старую активность. Правильно?

Спасибо

public class MainActivity extends AppCompatActivity{


recyclerview.post(new Runnable() {
@Override
public void run() {
    // Notify adapter with appropriate notify methods
    adapter.notifyItemRangeInserted(curSize, allContacts.size() - 1);
}
});

}

person Nick    schedule 22.07.2018    source источник


Ответы (1)


Этот код вызывает утечку памяти или нет?

Не совсем. Это Runnable должно быть выполнено в течение миллисекунды или около того, иначе у вас будут большие проблемы.

Если этот Runnable будет существовать в течение длительного периода времени, тогда у вас может быть утечка памяти.

person CommonsWare    schedule 22.07.2018
comment
И как я должен знать, что этот runnable останется в течение длительного периода времени? Если по какой-то причине основной поток не сможет выполнить этот исполняемый файл до того, как произойдет ротация, произойдет утечка памяти. Но даже так, как я могу это контролировать? Я не думаю, что есть обходной путь - person Nick; 22.07.2018
comment
@Nick: И как мне узнать, останется ли эта работающая программа в течение длительного периода времени? -- вызов post() не приведет к долгоживущему Runnable, если только в вашем приложении нет серьезных ошибок, которые заставляют основной поток приложения быть занятым в течение длительного времени. Если по какой-то причине основной поток не сможет выполнить этот исполняемый файл до того, как произойдет ротация, произойдет утечка памяти — это произойдет из-за ошибки в вашем коде, которая связывает основной поток приложения. как я могу это контролировать? -- исправьте ошибку в вашем коде, которая связывает основной поток приложения. - person CommonsWare; 22.07.2018
comment
Если что-то убьет активность до выполнения runnable, произойдет утечка памяти. - person Nick; 22.07.2018