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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.97
aaleksander
110 / 84 / 1
Регистрация: 06.06.2011
Сообщений: 395
Записей в блоге: 1
#1

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

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

Добрый вечер уважаемые.
не могу решить вот такую проблему:
Сделал пример отсюда: http://megadarja.blogspot.com/2009/0...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);
                    }
                }
            }
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 11:43     Кнопка "домой", смена ориентации и прочее :)
Посмотрите здесь:

Смена ориентации на планшете и запрет на телефоне Android
Смена ориентации экрана Android
Android Системная кнопка "Назад"
Android Кнопка "Back" для приложения
Android Не работает кнопка "Home"
Смена ориентации с портретной на альбомную методом create Android
Android Свой Launcher. Срабатывает кнопка "назад"
Android Глючит кнопка Домой. Что делать?
При смене ориентации на land программа "вылетает" Android
Android Смена ориентации экрана перезапускает приложение
Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры" Android
Таймер. Кнопка "Пауза" Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dajver
407 / 271 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
11.04.2012, 23:25     Кнопка "домой", смена ориентации и прочее :) #2
Все реализовано правильно, просто убери онСтоп, у дарьи все работает без него, сам учился по её урокам, но мало что полезного вынес. Вот тут я писал как делать игру под android, почитай я думаю объясняю понятно.

Твоего вопроса там нет, но реализовывать все без онПаузе и онСтоп можно спокойно, они не обязательны.
aaleksander
110 / 84 / 1
Регистрация: 06.06.2011
Сообщений: 395
Записей в блоге: 1
12.04.2012, 09:13  [ТС]     Кнопка "домой", смена ориентации и прочее :) #3
У Дарьи не запускается повторно, если вышел из апликухи по клавише "домой". Я пока просто пересоздаю поток, вроде работает. Сейчас почитаю твою статью.
Спасибо.
Rebelx
3 / 3 / 0
Регистрация: 13.10.2009
Сообщений: 40
12.04.2012, 15:05     Кнопка "домой", смена ориентации и прочее :) #4
Вопрос почти в тему - как сделать layout, который был бы разным в ландшафте, в зависимости от направления поворота?
т.е. я хочу сделать кнопки:
Портрет - внизу, где home
Ландшафт - или слева или справа, где home
silentnuke
Android Programmer
138 / 139 / 5
Регистрация: 08.12.2010
Сообщений: 421
12.04.2012, 18:42     Кнопка "домой", смена ориентации и прочее :) #5
Цитата Сообщение от Rebelx Посмотреть сообщение
Вопрос почти в тему - как сделать layout, который был бы разным в ландшафте, в зависимости от направления поворота?
т.е. я хочу сделать кнопки:
Портрет - внизу, где home
Ландшафт - или слева или справа, где home
используйте layout-port и layout-land
Yandex
Объявления
12.04.2012, 18:42     Кнопка "домой", смена ориентации и прочее :)
Ответ Создать тему
Опции темы

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