утечка памяти при прохождении любого объекта - PullRequest
0 голосов
/ 30 октября 2018

У меня есть вопрос по поводу утечки памяти Android.

 public class MainActivity extends Activity {

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

    MyClass m = new MyClass();
    m.setListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

}

public class MyClass {

private static  View.OnClickListener listener;

public void setListener(View.OnClickListener listener) {
   this.listener = listener;
}
}

это может привести к утечке памяти? если да, то почему? это хорошая техника для передачи слушателя?

1 Ответ

0 голосов
/ 30 октября 2018

Статические поля потенциально опасны, поскольку на них могут ссылаться Actvities и другие объекты, вызывающие большинство проблем утечки памяти.

Время жизни статического объекта равно времени жизни приложения, что означает, что он будет работать до тех пор, пока приложение не будет запущено, и его нельзя будет собрать до его завершения. Вы сделали базовый пример утечки памяти.

Views относятся к Activity и прочно удерживают ссылку на него, но, поскольку вы объявили его как private static View.OnClickListener listener, он утечет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...