Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
ASDFD12
31 / 31 / 5
Регистрация: 15.09.2012
Сообщений: 408
05.03.2014, 14:43     Освобождение памяти #1
Есть игра, в которой много уровней.
Создание уровня происходит внутри оператора 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);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MegaSinner
 Аватар для MegaSinner
91 / 91 / 3
Регистрация: 09.04.2010
Сообщений: 746
05.03.2014, 15:32     Освобождение памяти #2
ASDFD12, попробуй вызвать System.gc();
ASDFD12
31 / 31 / 5
Регистрация: 15.09.2012
Сообщений: 408
05.03.2014, 15:34  [ТС]     Освобождение памяти #3
MegaSinner, где его помещать, в начале нового уровня?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
05.03.2014, 16:32     Освобождение памяти #4
ASDFD12, думаю, в конце уровня. перед загрузкой нового. Но обратите внимание на то, что System.gc() это не вызов сборщика, а всего лишь рекомендация jvm вызвать его. Это команда может спокойно быть проигнорирована виртуальной машиной.
ASDFD12
31 / 31 / 5
Регистрация: 15.09.2012
Сообщений: 408
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)
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
05.03.2014, 16:38     Освобождение памяти #6
ASDFD12, и ещё. Беспокоитесь о памяти - обнуляйте объекты. decodeResource вызывайте с опциями (перегруженный метод) для минимазации нагрузки на память. Подробнее об этом Вам расскажет Google http://developer.android.com/trainin...ad-bitmap.html

Добавлено через 1 минуту
Вызывая decodeResource без options Вы рискуете выхватить OutOfMemoryError на слабых девайсах при большой картинке
ASDFD12
31 / 31 / 5
Регистрация: 15.09.2012
Сообщений: 408
05.03.2014, 16:42  [ТС]     Освобождение памяти #7
YuraAAA, спасибо, буду разбираться.
А глупо ли будет в методе onCreate класса наследника Application создать сразу масив всех обьектов для всех уровней, что скажете (это имеется box и player)?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
05.03.2014, 16:44     Освобождение памяти #8
ASDFD12, это упростит конечно код, но я бы не рекомендовал Вам это делать. Или можете так сделать и сделать профилирование памяти, посмотреть сколько это сожрёт. Если это простые классы - сущности, то почему бы и нет. С другой стороны, не совсем хорошо архитектурно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2014, 16:51     Освобождение памяти
Еще ссылки по теме:

Проверка расширенной памяти Android
Не понимаю нехватку памяти Android
Android ImageView очистка памяти
Android AsynkTask и утечки памяти
Утечка памяти Android

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

Или воспользуйтесь поиском по форуму:
ASDFD12
31 / 31 / 5
Регистрация: 15.09.2012
Сообщений: 408
05.03.2014, 16:51  [ТС]     Освобождение памяти #9
Цитата Сообщение от YuraAAA Посмотреть сообщение
я бы не рекомендовал Вам это делать
наверное так и сделаю))
Yandex
Объявления
05.03.2014, 16:51     Освобождение памяти
Ответ Создать тему
Опции темы

Текущее время: 10:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru