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

Кнопка "домой", смена ориентации и прочее :) - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Большое количество итемов в listView! http://www.cyberforum.ru/android-dev/thread544354.html
При выводе большого количества итемов в listView, используя адаптор, столкнулся с проблемой переполнения памяти. Загуглив, нашел некоторые варианты решений. Как вы фиксите это? Какой на ваш взгляд...
Программирование Android Определение размеров экрана устройства Хочу отцентрировать несколько кнопок на Activity. Кнопки кидаю в контейнер. LinearLayout myContainer = new LinearLayout(this); myContainer.setLayoutParams(new... http://www.cyberforum.ru/android-dev/thread544249.html
Программирование Android Отловить нажатие кнопки Home
Всем привет! Как отловить нажатие кнопки Home. В onKeyDown не получается.... Какие ещё варианты?
Доступ к БД из другого Activity. Программирование Android
Очередной нубский вопрос. В главном активити есть dbHelper. Все хорошо. Хочу в одном активити показать результат запроса в виде таблицы, а в другом в виде графика. Такой код, естественно, не...
Программирование Android Как загрузить в эмулятор .xml файл http://www.cyberforum.ru/android-dev/thread544027.html
ДОбрый день, подскажите пожалуйста, есть основа приложения с кнопкой "каталог" есть хмл файл в котором много всего и он отдельно, надо его в проект как-то вставить запускаю эмулятор, перехожу в...
Программирование Android gsm шлюз под андроидом задача такая, я подконекчиваюсь к мобиле од андроидом по wifi и хочу с компа заставить свою мобилу позвонить а главное на мои комп переслать голос, то есть выступить в роли шлюза, вот как реализоать... подробнее

Показать сообщение отдельно
aaleksander
110 / 84 / 1
Регистрация: 06.06.2011
Сообщений: 397
Записей в блоге: 1

Кнопка "домой", смена ориентации и прочее :) - Программирование Android

11.04.2012, 11:43. Просмотров 3954. Ответов 4
Метки (Все метки)

Добрый вечер уважаемые.
не могу решить вот такую проблему:
Сделал пример отсюда: http://megadarja.blogspot.com/2009/03/android-1-surface.html

Там к комментариях правильно сказано, что если нажать домой, то при повторном запуске, приложение валится с ошибкой.
Сделал у активи с поверхностью метод:
Java
1
2
3
4
5
    @Override
    public void onStop(){
        super.onStop();
        finish();
    }
Падать перестала, но зато теперь эквити при смене ориентации экрана выходит в эту процедуру и, естественно завершает работу.
Т.е. получается такая ситуация: у меня в программе в главном эквити (оно же меню) есть кнопка "Показать как график". Я её жму, попадаю на график, поворачиваю телефон и вновь оказываюсь в главном меню.
Если onStop убрать, то поверхность перерисовывается согласно ориентации экрана, но зато валится при повторном запуске.
Подскажите, какое условие нужно поставить в onStop, чтобы эквити знало, что я просто повернул телефон, а не нажал кнопку "домой".

Спасибо.

Добавлено через 17 часов 58 минут
Кое-что вырисовывается.
Выдает такую ошибку:
java.lang.IllegalThreadStateException: Thread already started.
at java.lang.Thread.start(Thread.java:1322)
at com.android.graph.Chart.surfaceCreated(Chart.java:55)
at android.view.SurfaceView.updateWindow(SurfaceView.java:532)
at android.view.SurfaceView.onWindowVisibilityChanged(SurfaceView.java:206)
at android.view.View.dispatchWindowVisibilityChanged(View.java:3891)
Т.е. повторно пытается запустить поток для рисования.
Переделал процедуру запуска вот так:
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
    @Override
    public void surfaceCreated(SurfaceHolder holder)
    {//запускаем поток рисования
        if( mThread.getRunning() == false ){
            mThread.setRunning(true);
            mThread.start();    <-------вот тут падает
        }
    }
 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder)
    {//прибиваем поток рисования
        boolean retry = true;
        mThread.setRunning(false);
        while (retry)
        {
            try
            {
                // ожидание завершение потока
                mThread.join();
                retry = false;
            }
            catch (InterruptedException e) { }
        }       
    }
Но проблемма осталась. Т.е. getRunning возвращает false, и пытается запустить уже запущенный поток.

Поток вроде тоже реализован правильно:
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
        /**
         * Задание состояния потока
         * @param running
         */
        public void setRunning(boolean running)
        {
            mRunning = running;
        }
        
        public boolean getRunning()
        {
            return mRunning;
        }
 
        @Override
        /** Действия, выполняемые в потоке */
        public void run()
        {
            while (mRunning)
            {
                Canvas canvas = null;
                try
                {
                    // подготовка Canvas-а
                    canvas = mSurfaceHolder.lockCanvas();
                    synchronized (mSurfaceHolder)
                    {
                        // собственно рисование
                        draw(canvas);                        
                    }
                }
                catch (Exception e) { }
                finally
                {
                    if (canvas != null)
                    {
                        mSurfaceHolder.unlockCanvasAndPost(canvas);
                    }
                }
            }
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru