Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666

Вылет приложения при использования бокового меню. О чем говорят логи

14.10.2013, 20:20. Показов 1420. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться с ошибкой при работе с боковым меню. В лог выводит следующую информацию:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10-14 19:14:05.209: D/AndroidRuntime(20524): Shutting down VM
10-14 19:14:05.209: W/dalvikvm(20524): threadid=1: thread exiting with uncaught exception (group=0x40018578)
10-14 19:14:05.219: E/AndroidRuntime(20524): FATAL EXCEPTION: main
10-14 19:14:05.219: E/AndroidRuntime(20524): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@40643ab8
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.graphics.Canvas.throwIfRecycled(Canvas.java:955)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.graphics.Canvas.drawBitmap(Canvas.java:1044)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:325)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.widget.ImageView.onDraw(ImageView.java:854)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.View.draw(View.java:6880)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.View.draw(View.java:6883)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.View.draw(View.java:6883)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.widget.FrameLayout.draw(FrameLayout.java:357)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1921)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewRoot.draw(ViewRoot.java:1528)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewRoot.performTraversals(ViewRoot.java:1264)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1866)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.os.Looper.loop(Looper.java:130)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at android.app.ActivityThread.main(ActivityThread.java:3687)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at java.lang.reflect.Method.invokeNative(Native Method)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at java.lang.reflect.Method.invoke(Method.java:507)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
10-14 19:14:05.219: E/AndroidRuntime(20524):    at dalvik.system.NativeStart.main(Native Method)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.10.2013, 20:20
Ответы с готовыми решениями:

Ошибка при создании бокового меню. Navigation Drawer
Суть в чем. Делал по уроку. Там создавался класс. Например menu1 menu 2 и т.д и лейауты к ним( menu_layout1, menu_layout2 и т.д) я...

Вылет приложения при работе с jsoup
приложение вылетает на строках : String html = "<html>Some html text</html>"; Document doc = Jsoup.parse(html);либу пробовал по разному...

Непонятный вылет приложения при установки значения в NumberPicker
Доброго времени суток. Никак не получается не передать значение, ни получить значения NumberPicker. Программа вылетает при нажатии на...

6
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 738
14.10.2013, 20:51
http://stackoverflow.com/quest... ap-android
0
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
14.10.2013, 21:10  [ТС]
немного не подходи к моей проблеме, может вы разберетесь вот код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package com.korovyansk.android.slideout;
 
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout.LayoutParams;
 
public class SlideoutHelper {
 
    private static Bitmap sCoverBitmap = null;
    private static int sWidth = -1;
 
    public static void prepare(Activity activity, int id, int width) {
        if (sCoverBitmap != null) {
            sCoverBitmap.recycle();
        }
        Rect rectgle = new Rect();
        Window window = activity.getWindow();
        window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
        int statusBarHeight = rectgle.top;
 
        ViewGroup v1 = (ViewGroup) activity.findViewById(id).getRootView();
        v1.setDrawingCacheEnabled(true);
        Bitmap source = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);
        if (statusBarHeight != 0) {
            sCoverBitmap = Bitmap.createBitmap(source, 0, statusBarHeight, source.getWidth(), source.getHeight() - statusBarHeight);
            source.recycle(); 
            
        } else {
            sCoverBitmap = source;
        }
        sWidth = width;
    }
 
    public SlideoutHelper(Activity activity) {
        this(activity, false);
    }
    
    public SlideoutHelper(Activity activity, boolean reverse) {
        mActivity = activity;
        mReverse = reverse;
    }
 
    public void activate() {
        mActivity.setContentView(R.layout.slideout);
        mCover = (ImageView) mActivity.findViewById(R.id.slidedout_cover);
        mCover.setImageBitmap(sCoverBitmap);
        mCover.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                close();
            }
        });
        int x = (int) (sWidth * 1.2f);
        if (mReverse) {
            @SuppressWarnings("deprecation")
            final android.widget.AbsoluteLayout.LayoutParams lp = new android.widget.AbsoluteLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, x, 0);
            mActivity.findViewById(R.id.slideout_placeholder).setLayoutParams(lp);
        } else{
            @SuppressWarnings("deprecation")
            final android.widget.AbsoluteLayout.LayoutParams lp = new android.widget.AbsoluteLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 0, 0);
            mActivity.findViewById(R.id.slideout_placeholder).setLayoutParams(lp);
        }
        initAnimations();
    }
 
    public void open() {
        mCover.startAnimation(mStartAnimation);
    }
 
    public void close() {
        mCover.startAnimation(mStopAnimation);
    }
 
    protected void initAnimations() {
        int displayWidth = ((WindowManager) mActivity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();
        final int shift = (mReverse ? -1 : 1) * (sWidth - displayWidth);
        mStartAnimation = new TranslateAnimation(
                TranslateAnimation.ABSOLUTE, 0,
                TranslateAnimation.ABSOLUTE, -shift,
                TranslateAnimation.ABSOLUTE, 0,
                TranslateAnimation.ABSOLUTE, 0
                );
 
        mStopAnimation = new TranslateAnimation(
                TranslateAnimation.ABSOLUTE, 0,
                TranslateAnimation.ABSOLUTE, shift,
                TranslateAnimation.ABSOLUTE, 0,
                TranslateAnimation.ABSOLUTE, 0
                );
        mStartAnimation.setDuration(DURATION_MS);
        mStartAnimation.setFillAfter(true);
        mStartAnimation.setAnimationListener(new AnimationListener() {
 
            @Override
            public void onAnimationStart(Animation animation) {
            }
 
            @Override
            public void onAnimationRepeat(Animation animation) {
            }
 
            @Override
            public void onAnimationEnd(Animation animation) {
                mCover.setAnimation(null);
                @SuppressWarnings("deprecation")
                final android.widget.AbsoluteLayout.LayoutParams lp = new android.widget.AbsoluteLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, -shift, 0);
                mCover.setLayoutParams(lp);
            }
        });
 
        mStopAnimation.setDuration(DURATION_MS);
        mStopAnimation.setFillAfter(true);
        mStopAnimation.setAnimationListener(new AnimationListener() {
 
            @Override
            public void onAnimationStart(Animation animation) {
            }
 
            @Override
            public void onAnimationRepeat(Animation animation) {
            }
 
            @Override
            public void onAnimationEnd(Animation animation) {
                mActivity.finish();
                mActivity.overridePendingTransition(0, 0);
            }
        });
    }
 
    private static final int DURATION_MS = 400;
    private ImageView mCover;
    private Activity mActivity;
    private boolean mReverse = false;
    private Animation mStartAnimation;
    private Animation mStopAnimation;
}
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
14.10.2013, 21:38
имхо
вот эти строки там совсем лишние
Java
1
2
3
if (sCoverBitmap != null) {
            sCoverBitmap.recycle();
        }
1
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
14.10.2013, 21:45  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
имхо
вот эти строки там совсем лишние
Да если это закаментить, то приложение не крашится. Но а вы можете объяснить почему они лишние? и не будет ли утечки памяти без них?
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
14.10.2013, 22:03
http://developer.android.com/t... emory.html
Caution: You should use recycle() only when you are sure that the bitmap is no longer being used. If you call recycle() and later attempt to draw the bitmap, you will get the error: "Canvas: trying to use a recycled bitmap".
Его нужно вызывать когда уже картинка совсем не будет нужна. Я недели две возился с Out of Memory, а потом стал вызывать этот метод только тогда, когда надо сменить битмап на вьюшке. То есть создается новый объект Bitmap, который потом назначается ImageView например. При этом переменная сама-то остается. Я не пейсатель, не могу четче объяснить

Добавлено через 8 минут
я сейчас не за своим компьютером, не могу пример рабочий скопировать, что бы показать разницу, но своими словами примерно так, псевдокод:
Bitmap b;
b = new Bitmap();
view.setBitmap(b);
b = Bitmap.createBitmap(bla-bla-bla);
view.setBitmap(b); \\атата, имхо так будет утечка, перед этой строкой надо бы вызвать recycle()
как-то так
view.getDrawable().getBitmap().recycle() ;
не отвечаю за правильность последней строки, но идея в том, что мы делаем recycle примененному на вьюшку битмапу, не переменной b
1
7 / 7 / 1
Регистрация: 20.04.2013
Сообщений: 666
18.10.2013, 17:20  [ТС]
Цитата Сообщение от verylazy Посмотреть сообщение
имхо
вот эти строки там совсем лишние

if (sCoverBitmap != null) {
* * * * * * sCoverBitmap.recycle();
* * * * }

А если это закаментить и работать, так можно? или нужно в другом месте где-то этот код использовать, что очищать bitmap?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2013, 17:20
Помогаю со студенческими работами здесь

Вылет приложения при запуске после загрузки шрифта
Android Studio 2.3 В папке \app\src\main\ (рядом с манифестом) создал папку assets\fonts и положил файл ds-digit.TTF При добавлении...

Вылет при проектировании визуального приложения (Windows7 x32, C, GTK+)
Разбираюсь с библиотекой gtk+ (версия 2.24.10). Пишу в CodeBlocks(12.11), в windows7 x32 Встретил следующую проблему. Нужно было...

Вылет приложения при вызове статической функции/переменной из библиотеки
Создал библиотеку в ней есть статический класс при вызове которого из приложения получаю аварийное завершение программы, даже debugger не...

Вылет приложения на этапе компиляции при попытке смены изображения (динамический массив Пикчербоксов)
Имеется прототип для игровой части Сапера, в силу условностей требуемой в реализации С++/CLI. Имеется нерабочий код формы: #pragma once ...

Как изменить ширину бокового меню?
Добрый день, дорогие друзья! Решил дополнить свой сайт: www.exotik-massage.ru боковым меню, для удобства навигации. Но, меню, на мой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru