Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Обновление/перезапуск layout по нажатию http://www.cyberforum.ru/android-dev/thread1421683.html
необходимо, чтобы по нажатию обновлялся/перезапускался layout. как организовать?
Программирование Android Как настроить gradle в Android Studio на работу с NDK Можете дать ссылку на готовый пример или подробное описание как подключить ndk в android studio?? NDK я скачал с сайта распаковал архив и создал переменную среды в Windows, которая содержит путь к... http://www.cyberforum.ru/android-dev/thread1421672.html
Зафиксировать пзицию элемента в ListView Программирование Android
Коллеги, нужен совет. Ситуация такая - Есть один ListView, элементом списка является WebView. Так вот, после иницализации адаптера нужно прокрутить список к нужному элементу. Проблема состоит в том...
Программирование Android Копирование папки из Assets
Всем здравствуйте! Я бы хотел узнать как можно скопировать подпапку (например "pictures") находящуюся в папке assets на карту памяти телефона. В подпапке "pictures" находятся несколько картинок. ...
Программирование Android В чем различие эмуляторов? http://www.cyberforum.ru/android-dev/thread1421628.html
извиняюсь, что немного не по теме, но хелп, кто может. Есть два эмуляторы: BlueStacks и Genymotion. Допустим оба эмулируют Samsung Galaxy S3. Загрузив в эмуляторах приложение FreeMyApps, это...
Программирование Android Создание приложения "Расписание по группам вуза" Доброго времени суток, пришло время работы над дипломом. Хочу создать приложение для андроид Расписание по группам вуза. Все данные есть на сайте как мне связать сайт с программой, и установить... подробнее

Показать сообщение отдельно
Rm1
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 11

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

15.04.2015, 17:35. Просмотров 216. Ответов 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;
 }
 }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.