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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Rm1
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 11
#1

SurfaceHolder (вылетает Активити) - Программирование Android

15.04.2015, 17:35. Просмотров 202. Ответов 0
Метки нет (Все метки)

Всем привет! Не знаю, с какой стороны подступиться к решению следующей проблемы: захожу в Активити, после этого возвращаюсь в меню, а затем снова пытаюсь из меню зайти в ту же Активити. При втором заходе выскакивает ошибка Out of memory и открывается Choreographer.class со стрелкой на строку с закрывающейся скобкой после mCallbacksRunning = true;

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void doCallbacks(int callbackType, long frameTimeNanos) {
        CallbackRecord callbacks;
        synchronized (mLock) {
            // We use "now" to determine when callbacks become due because it's possible
            // for earlier processing phases in a frame to post callbacks that should run
            // in a following phase, such as an input event that causes an animation to start.
            final long now = SystemClock.uptimeMillis();
            callbacks = mCallbackQueues[callbackType].extractDueCallbacksLocked(now);
            if (callbacks == null) {
                return;
            }
            mCallbacksRunning = true;
        }
        try {
            for (CallbackRecord c = callbacks; c != null; c = c.next) {
                if (DEBUG) {
                    Log.d(TAG, "RunCallback: type=" + callbackType
                            + ", action=" + c.action + ", token=" + c.token
                            + ", latencyMillis=" + (SystemClock.uptimeMillis() - c.dueTime));
                }
                c.run(frameTimeNanos);
            }

Активити имеет вот такую форму:

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
public class Test extends SurfaceView implements SurfaceHolder.Callback{
public Test(Context context) {
 super(context);
 getHolder().addCallback(this);
}
 
         public void surfaceCreated(SurfaceHolder holder) { 
     updateThread = new UT(this);
     updateThread.setRunning(true);
     updateThread.start();
     }
 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
     }
 
     public void surfaceDestroyed(SurfaceHolder holder) {    
     boolean retry = true;
     updateThread.setRunning(false);
     while (retry) {
     try {updateThread.join();
     retry = false; } 
     catch (InterruptedException e) {
     }
     }
     }
    }
Ну и код класса Update Tread

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
public class UT extends Thread {
 
 private long time;
 private final int fps = 20;
 private boolean toRun = false;
 private Test Test;
 private SurfaceHolder surfaceHolder;
 
 public UT(Test rTest) {
 Test = rTest;
 surfaceHolder = Test.getHolder();
 }
 
 public void setRunning(boolean run) {
 toRun = run;
 }
 
 @SuppressLint("WrongCall")
@Override
 public void run() {
 Canvas c;
 while (toRun) {
 
 long cTime = System.currentTimeMillis();
 
 if ((cTime - time) <= (1000 / fps)) {
 
 c = null;
 try {
 c = surfaceHolder.lockCanvas(null);
 Test.onDraw(c);
 } finally {
 
 if (c != null) {
 surfaceHolder.unlockCanvasAndPost(c);
 }
 }
 }
 time = cTime;
 }
 }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2015, 17:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SurfaceHolder (вылетает Активити) (Программирование Android):

Приложение вылетает после перехода на второе активити - Программирование Android
Здравствуйте! Помогите разобраться с причиной вылета второго активити. Код главного активити package...

Приложение вылетает после перехода на новое активити - Программирование Android
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Программа выдает ошибку и вылетает при переходе на новое активити. В...

На телефоне highscreen 3 на всех активити происходит быстрый самовозврат к главной активити - Программирование Android
Сделал меню в виде ListView. При клике на меню запускаются активити. На эмуляторе работает, на телефоне моем LG все работает. На телефоне...

Как вызвать метод в активити классе из обычного не активити класса? - Программирование Android
Есть активити в котором вводятся логин и пароль. При нажатии кнопки &quot;войти&quot; в отдельном классе &quot;сокетсервер&quot;(+в отдельном потоке)...

Отображение активити поверх другого активити - Программирование Android
Ребят подскажите пожалуйста как такое сделать. Есть активити с картой, по нажатию кнопки настройки, нужно открыть активити с настройками,...

Изменение параметров активити из другого активити - Программирование Android
Как сделать так чтобы из первого активити поменять final ImageView img=(ImageView)findViewById(R.id.image1); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2015, 17:35
Привет! Вот еще темы с ответами:

Вызов новой активити не из класса активити - Программирование Android
Есть 4 класса: 1) WelcomeActivity; 2) MainActivity; 3) PopUpActivity; 4) Client. Программа работает с сервером и получает...

Активити - Программирование Android
Не могу вызвать второе Activity

Блокировка активити - Программирование Android
Возможно ли такое когда активити запускается а его блокируют и пользователь не может пользоваться интерфейсами: кнопками из layouta!...

Адаптивность Активити - Программирование Android
Здравствуйте! Я решил в первый раз создать серьезный просто приложение! И нарисовал макет который выложу ниже... Открыл Андроид Студио! И...


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

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

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