Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
ASDFD12
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 544
#1

Освобождение памяти

05.03.2014, 14:43. Просмотров 954. Ответов 8
Метки нет (Все метки)

Есть игра, в которой много уровней.
Создание уровня происходит внутри оператора switch
Вот пример одного из уровней.
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
case 1:
                
                fon=BitmapFactory.decodeResource(getResources(), R.drawable.fon1);
                canvas_Mask.drawBitmap(fon_white, 0, 0, null);
                     // задаю координаты победы
                coord_pobed= new ArrayList<int[]>(4);
                int a1_1[]={315,428};
                coord_pobed.add(a1_1);
                int a2_1[]={215,578};
                coord_pobed.add(a2_1);
                int a3_1[]={465,528};
                coord_pobed.add(a3_1);
                int a4_1[]={365,678};
                coord_pobed.add(a4_1);
             // задаю поле
                int pole1[][]={
                         {315,365,428,478},
                         {315,365,478,528},
                         {315,365,528,578},
                         {315,365,578,628},
                         
                         {365,415,528,578},
                         {365,415,578,628},
                         {365,415,628,678},
                         {365,415,678,728},
                         
                         {215,265,578,628},
                         {265,315,578,628},
                         
                         {415,465,528,578},
                         {465,515,528,578}
                             };
                // создаю Player и Box
                player= new Player(com.shcherban.box_box.GameView.this, photo_player,365,578,pole1);
                
                boxs=new ArrayList<Box>(4);
                Box box1_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 315, 528,pole1);
                boxs.add(box1_1);
                Box box2_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 315, 578,pole1);
                boxs.add(box2_1);
                Box box3_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 365, 628,pole1);
                boxs.add(box3_1);
                Box box4_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 415, 528,pole1);
                boxs.add(box4_1);
                                         
            break;
Интересует, при переходе на новый уровень, сборщик мусора сам удаляет неиспользуемые обьекты или их надо самому удалять?

Добавлено через 1 час 6 минут
при большом количестве уровней отвергается метод в котором, они определены
Java
1
03-05 07:42:20.855: W/dalvikvm(446): VFY: arbitrarily rejecting large method (regs=177 count=12498)
Добавлено через 27 минут
может быть создать статический класс содержащий все статические переменные, а в case оставить только
определение обьектов
Java
1
2
3
4
5
6
7
8
9
10
11
 player= new Player(com.shcherban.box_box.GameView.this, photo_player,365,578,pole1);
                
                boxs=new ArrayList<Box>(4);
                Box box1_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 315, 528,pole1);
                boxs.add(box1_1);
                Box box2_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 315, 578,pole1);
                boxs.add(box2_1);
                Box box3_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 365, 628,pole1);
                boxs.add(box3_1);
                Box box4_1= new Box (com.shcherban.box_box.GameView.this, photo_box, 415, 528,pole1);
                boxs.add(box4_1);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2014, 14:43
Ответы с готовыми решениями:

Резервирование памяти/освобождение памяти для трехмерного массива
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены...

Освобождение памяти
Есть у меня структура односвязного списка: type PSnow = ^TSnow; TSnow = record...

Освобождение памяти
Подскажите, пожалуйста, я ещё зелёный в C#. Есть у меня класс Form1, при определённом событии в нём...

Освобождение памяти
Маленький вопросик, как правильно освобождать память выделенную под vector&lt;...&gt;, деструктором...

освобождение памяти
Помогите найти ошибку, программа вилиться когда освобождаю память! Здесь выделения памяти double...

8
MegaSinner
97 / 93 / 9
Регистрация: 09.04.2010
Сообщений: 746
05.03.2014, 15:32 #2
ASDFD12, попробуй вызвать System.gc();
1
ASDFD12
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 544
05.03.2014, 15:34  [ТС] #3
MegaSinner, где его помещать, в начале нового уровня?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
05.03.2014, 16:32 #4
ASDFD12, думаю, в конце уровня. перед загрузкой нового. Но обратите внимание на то, что System.gc() это не вызов сборщика, а всего лишь рекомендация jvm вызвать его. Это команда может спокойно быть проигнорирована виртуальной машиной.
1
ASDFD12
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 544
05.03.2014, 16:36  [ТС] #5
пока что масcивы pole[] поместил в класс наследник Application, таким образом устранил
Java
1
03-05 07:42:20.855: W/dalvikvm(446): VFY: arbitrarily rejecting large method (regs=177 count=12498)
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
05.03.2014, 16:38 #6
ASDFD12, и ещё. Беспокоитесь о памяти - обнуляйте объекты. decodeResource вызывайте с опциями (перегруженный метод) для минимазации нагрузки на память. Подробнее об этом Вам расскажет Google http://developer.android.com/trainin...ad-bitmap.html

Добавлено через 1 минуту
Вызывая decodeResource без options Вы рискуете выхватить OutOfMemoryError на слабых девайсах при большой картинке
1
ASDFD12
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 544
05.03.2014, 16:42  [ТС] #7
YuraAAA, спасибо, буду разбираться.
А глупо ли будет в методе onCreate класса наследника Application создать сразу масив всех обьектов для всех уровней, что скажете (это имеется box и player)?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
05.03.2014, 16:44 #8
ASDFD12, это упростит конечно код, но я бы не рекомендовал Вам это делать. Или можете так сделать и сделать профилирование памяти, посмотреть сколько это сожрёт. Если это простые классы - сущности, то почему бы и нет. С другой стороны, не совсем хорошо архитектурно
1
ASDFD12
58 / 57 / 15
Регистрация: 15.09.2012
Сообщений: 544
05.03.2014, 16:51  [ТС] #9
Цитата Сообщение от YuraAAA Посмотреть сообщение
я бы не рекомендовал Вам это делать
наверное так и сделаю))
0
05.03.2014, 16:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2014, 16:51

Освобождение памяти
Собственно есть простенький класс class Human { public: Human ( ); void...

Освобождение памяти
Есть класс, в котором я выделяю память с помощью new. В деструкторе класса я с помощью delete...

Освобождение памяти
Добрый день. Пишу в рубрику &quot;Вопросы начинающих по С/С++&quot; посему вопрос глупый :) И все же, есть...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru