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

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

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

SurfaceHolder (вылетает Активити) - Android

15.04.2015, 17:35. Просмотров 196. Ответов 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
Android Не выводится фон на активити
Android Второй активити
Android Смена активити
Android Абстрактная активити
Android Выбор активити из уведомления
Приложение вылетает после перехода на новое активити Android
Android Приложение вылетает после перехода на второе активити
Адаптивность Активити Android
Android Пересоздание активити
Android Вызов активити

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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