Мы разрабатываем приложение с раскрывающейся панелью управления, которая позволяет пользователям перемещаться по приложению. Навигация не очень стандартная, поскольку доступ к этому меню можно получить практически из любого действия. Поиграв некоторое время, открывая действия с помощью меню, стек начинает расти и расти.
Все эти действия содержат списки с несколькими представлениями изображений внутри, и каждое из них занимает около 3 МБ. Если пользователь играет достаточно и создает более 25 действий в стеке, вот что происходит:
Я ожидал, что система автоматически убьет самые старые действия в стеке ДО того, как будет выброшена ошибка OutOfMemoryError...
Просто чтобы убедиться, что ОС не убивает старые действия, я создал тестовое приложение, которое каждый раз выделяет 1 МБ. Угадайте, что :Поведение такое же, и выдается outofmemerror:
Вопрос :в том, как мы можем сообщить операционной системе Android, что ей разрешено освобождать действия и ее ресурсы, если это необходимо, чтобы мы не получили сообщение «К сожалению, ваша активность остановлена». диалог?
Подтверждение концепции
package com.gaspar.memorytest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MemoryTestActivity extends Activity {
/** Called when the activity is first created. */
private byte[] mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(MemoryTestActivity.this, MemoryTestActivity.class);
startActivity(i);
}
});
mData = new byte[1*1024*1024];
}
}