Я использую изображение в качестве фона для всех своих действий, но оно вызывает проблему переполнения памяти и приводит к сбою приложения. Теперь я отвязываю свои рисунки при паузе () и при уничтожении () в своей деятельности, и теперь при нажатии кнопки «Назад» отображается пустой экран. Итак, как я могу избежать этого, не используя дополнительную память.
protected void onPause(){
super.onPause();
unbindDrawables(findViewById(R.id.login_root));
}
protected void onDestroy() {
unbindDrawables(findViewById(R.id.login_root));
super.onDestroy();
}
private void unbindDrawables(View view) {
System.gc();
Runtime.getRuntime().gc();
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
Первоначально я раздувал свой макет с помощью android:background="@drawable/", что всегда вызывало ошибку переполнения памяти, говорящую о том, что виртуальная машина не позволит нам выделить 10 МБ (прибл.). Теперь я получаю растровое изображение из этого рисунка без масштабирования и привязки это во время выполнения. Теперь он говорит, что виртуальная машина не позволит нам выделить 5 МБ (прибл.) без использования unbindDrawables (..). Очевидно, что качество отображаемого фонового изображения уменьшилось, но я не могу понять, что если я использую png размером 13 КБ, как JVM требует 5 или 10 МБ места для обработки запроса?
Я переместил свои операторы макета из метода onCreate() в метод onResume(), но при нажатии кнопки «Назад» приложению снова не хватает памяти.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
protected void onResume(){
setContentView(R.layout.home);
Bitmap bmp;
ImageView background = (ImageView)findViewById(R.id.iv_home_background);
InputStream is = getResources().openRawResource(R.drawable.background);
bmp = BitmapFactory.decodeStream(is);
background.setImageBitmap(bmp);
super.onResume();
}
protected void onPause(){
super.onPause();
unbindDrawables(findViewById(R.id.home_root));
}
private void unbindDrawables(View view) {
System.gc();
Runtime.getRuntime().gc();
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
onPause()
, как заявил @JohnSatriano. Но все же покажите нам свою функцию onResume - person Sherif elKhatib   schedule 12.09.2012