2016-04-29 6 views
0

Мое приложение состоит из 4 файлов макета, каждый макет использует другое изображение в качестве фона. Мне удается загрузить макет 1 и 2, но после того, как я перейду к макету 3, я получаю сообщение об ошибке «Caused by: java.lang.OutOfMemoryError»Как очистить память от фотографий предыдущих макетов? Как очистить память при переходе к разному компоновке/активности?

Я подозреваю, что это связано с тем, что макет 1 и макет 2 все еще находятся в памяти. В любом случае, есть способ очистить память каждый раз, когда я перехожу на новый макет, поэтому у меня не хватает памяти? Благодарю.

P.S Я использую Android Studio.

PS 2 Я не уверен, если это меняет что-нибудь, но только в случае, если это то, как я хожу на различные мероприятия/раскладок:

previouspage.setOnClickListener(
       new Button.OnClickListener() { 
        public void onClick(View v) { 
         Intent intent = new Intent(v.getContext(), secondPage.class); 
         startActivity(intent); 
        } 
       } 
     ); 

     nextpage.setOnClickListener(
       new Button.OnClickListener() { 
        public void onClick(View v) { 
         Intent intent = new Intent(v.getContext(), FourthPage.class); 
         startActivity(intent); 
        } 
       } 
     ); 

ответ

2
new Button.OnClickListener() { 
     public void onClick(View v) { 
     Intent intent = new Intent(v.getContext(), secondPage.class); 
     startActivity(intent); 

     yourExistingActivity.finish(); // This will free the memory 

} 

Обратите внимание, что деятельность вы вызываете отделку() из уничтожается и ВСЕ его ресурсы поставлены в очередь для сбора мусора, и вся память, которая была использована этой деятельностью, будет освобождена во время следующего цикла GC.

Если вы действительно хотите, чтобы отменить память как можно скорее, переопределить метод OnDestroy вашей деятельности:

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Runtime.getRuntime().gc();  
} 
Смежные вопросы