Ситуация, когда происходит утечка памяти Android - PullRequest
0 голосов
/ 27 мая 2018

Я хочу понять, когда происходит утечка памяти.Например, если я запускаю этот runnable в действии, весь контекст действия будет перехвачен и, если произойдет ротация, действие не будет выпущено, пока не завершится runnable.

public class MainActivity extends AppCompatActivity {

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



    executors.diskIO().execute(new Runnable() {
        @Override
        public void run() {     

                        //CODE HERE

            });
        }
    });
}
}

Позволяет сказать, что я помещаю runnable внутрикласс в отдельном файле, не входящий в MainActivity, и инициирование его из действия.Когда происходит вращение, есть ли утечка памяти в этом случае?Я имею в виду, что runnable захватывает данные в каждом обороте, верно?

  public class A{

  Data ....


  public A() {}

  functionB(){

       executors.diskIO().execute(new Runnable() {
        @Override
        public void run() { }
         });

    });

   }
 }

1 Ответ

0 голосов
/ 27 мая 2018

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

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

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