У меня есть проект, который работает как презентация ImageViews с анимацией их, нажав. Он реализован как ViewFlipper с анимацией go_in и go_out. Каждый ImageView представлен в XML для каждого слайда презентации. Приложение предназначено для вкладок с Android 3.0 и выше. Размер кучи увеличивается с каждым переключением, и logcat выглядит так (до того как dalvik выдает ошибку: oof) ...
I/dalvikvm-heap(5313): Grow heap (frag case) to 205.584MB for 3850256-byte allocation
D/dalvikvm(5313): GC_CONCURRENT freed 0K, 1% free 210440K/210759K, paused 2ms+9ms
I/MediaPlayer(5313): prepareAsync called in state 4
D/dalvikvm(5313): GC_FOR_ALLOC freed 166K, 1% free 210478K/210887K, paused 29ms
I/dalvikvm-heap(5313): Grow heap (frag case) to 209.293MB for 3850256-byte allocation
D/dalvikvm(5313): GC_FOR_ALLOC freed <1K, 1% free 214238K/214663K, paused 33ms
D/dalvikvm(5313): GC_CONCURRENT freed <1K, 1% free 214238K/214663K, paused 3ms+10ms
D/dalvikvm(5313): GC_FOR_ALLOC freed 4K, 1% free 214838K/215303K, paused 32ms
I/dalvikvm-heap(5313): Grow heap (frag case) to 213.551MB for 3850256-byte allocation
D/dalvikvm(5313): GC_FOR_ALLOC freed 0K, 1% free 218598K/219079K, paused 33ms
D/dalvikvm(5313): GC_CONCURRENT freed <1K, 1% free 218598K/219079K, paused 1ms+10ms
I/MediaPlayer(5313): prepareAsync called in state 4
D/dalvikvm(5313): GC_FOR_ALLOC freed 7K, 1% free 220438K/220743K, paused 29ms
D/dalvikvm(5313): GC_FOR_ALLOC freed 2K, 1% free 222253K/222535K, paused 29ms
D/dalvikvm(5313): GC_FOR_ALLOC freed <1K, 1% free 222634K/222855K, paused 33ms
I/dalvikvm-heap(5313): Grow heap (frag case) to 221.165MB for 3850256-byte allocation
ТАК, вопрос - как можно обнулить кучу или перезапустить приложение? Или как организовать приложение так, чтобы оно не увеличивало кучу?
Вот код, который я использовал
ImageView buttonNext_13 = (ImageView)findViewById(R.id.Button_next_13);
buttonNext_13.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view131) {
flipper.setInAnimation(AnimationUtils.loadAnimation(
view131.getContext(), R.anim.go_next_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(
view131.getContext(), R.anim.go_next_out));
flipper.showNext();
mp_file.release();
mp_file = MediaPlayer.create(getApplicationContext(), R.raw.theme);
mp_file.start();
return;
}
});
ImageView buttonPrevious_13 = (ImageView)findViewById(R.id.button_preious13);
buttonPrevious_13.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view132) {
flipper.setInAnimation(AnimationUtils.loadAnimation(
view132.getContext(), R.anim.go_prev_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(
view132.getContext(), R.anim.go_prev_out));
flipper.showPrevious();
return;
}
});