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

Освобождение памяти - Программирование Android

05.03.2014, 14:43. Просмотров 947. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Освобождение памяти (Программирование Android):

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

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

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

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

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

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

8
MegaSinner
96 / 92 / 9
Регистрация: 09.04.2010
Сообщений: 746
05.03.2014, 15:32 #2
ASDFD12, попробуй вызвать System.gc();
1
ASDFD12
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
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
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
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
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
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
57 / 57 / 14
Регистрация: 15.09.2012
Сообщений: 542
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
Привет! Вот еще темы с решениями:

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

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

Освобождение памяти
Приветствую. Дублирую эту тему. Потому как полагал, что проблема может быть...

Освобождение памяти
Есть форма, из которой вызывается дочерняя форма, на дочерней форме есть...


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

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

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