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

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

14.10.2013, 20:20. Показов 1440. Ответов 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
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru