2015-12-03 2 views
2

У меня очень сложное приложение, которое пропускает память. Чтобы отследить утечку, я удалил приложение для запуска в очень простое приложение для Android, которое все еще пропускает активность при навигации к следующему действию. Я обнаружил утечку с помощью анализатора hprof в студии Android. Вся урезанная пусковая активность:Утечка памяти в очень простом приложении для Android

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class HomeTest extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button btnStaffStart = (Button)findViewById(R.id.btnStaffStart); 

    btnStaffStart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      Intent startNewActivityOpen = new Intent(HomeTest.this, StaffMenu.class); 
      startActivity(startNewActivityOpen); 

      finish(); 
     } 

    }); 
} 


} 

Когда я перейти к деятельности StaffMenu, анализатор показывает утечку в HomeTest деятельности. Что, если что-нибудь, я делаю неправильно или запускает активность, всегда утечка памяти в Android? Я не получаю сообщение об ошибке OutOfMemory, мне просто не нравится утечка памяти. Приложение не выделяет много памяти, поэтому свободная память очень минимальна даже при урезанной активности (менее 1%).

У меня работает Android 4.2, 4.4 и 5.1.

EDIT Я просто попробовал другое приложение, и оно также просочило активность запуска после перехода к следующему действию. Известный андроид-ошибка ???

ответ

2

В этом коде отсутствует утечка памяти. Я не могу объяснить результаты анализатора утечки памяти, но я не буду полностью доверять тому, что эта особенность была введена в последней версии AS.

Вы проверили, сколько у вас действий, когда вы перемещаетесь между этими двумя действиями несколько раз? Вы можете проверить это, используя эту команду в терминале adb shell dumpsys meminfo <package_name|pid> или используя AS в перспективе Android Monitor. В вашем случае не должно быть более двух активных действий.

enter image description here

Если вы хотите быть уверены, что я рекомендую вам использовать MAT профилировщика памяти. Как его использовать, вы можете найти here.

EDIT: это еще один хороший option, чтобы убедиться, что ваши действия не просочились. Example как сбросить кучу памяти на утечку активности.

+0

Спасибо за ваши комментарии. Было бы легче узнать, что это ошибка в AS. Я уже использую StrictMode, который ничего не обнаружил. –

+0

Я действительно использовал профилировщик памяти MAT, и это оказалось утечкой Bitmap в моем «реальном» приложении. Так спасибо за это. +1; –

Смежные вопросы