Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Большое количество итемов в listView! http://www.cyberforum.ru/android-dev/thread544354.html
При выводе большого количества итемов в listView, используя адаптор, столкнулся с проблемой переполнения памяти. Загуглив, нашел некоторые варианты решений. Как вы фиксите это? Какой на ваш взгляд...
Определение размеров экрана устройства Программирование Android
Хочу отцентрировать несколько кнопок на Activity. Кнопки кидаю в контейнер. LinearLayout myContainer = new LinearLayout(this); myContainer.setLayoutParams(new...
Программирование Android Отловить нажатие кнопки Home
Всем привет! Как отловить нажатие кнопки Home. В onKeyDown не получается.... Какие ещё варианты?
Программирование Android Доступ к БД из другого Activity. Очередной нубский вопрос. В главном активити есть dbHelper. Все хорошо. Хочу в одном активити показать результат запроса в виде таблицы, а в другом в виде графика. Такой код, естественно, не... http://www.cyberforum.ru/android-dev/thread544083.html
Программирование Android Как загрузить в эмулятор .xml файл http://www.cyberforum.ru/android-dev/thread544027.html
ДОбрый день, подскажите пожалуйста, есть основа приложения с кнопкой "каталог" есть хмл файл в котором много всего и он отдельно, надо его в проект как-то вставить запускаю эмулятор, перехожу в...
gsm шлюз под андроидом Программирование Android
задача такая, я подконекчиваюсь к мобиле од андроидом по wifi и хочу с компа заставить свою мобилу позвонить а главное на мои комп переслать голос, то есть выступить в роли шлюза, вот как реализоать...
Программирование Android Подключение к програме сервер на пк
Кто-то может посоветовать, как подключиться к программе сервера на ПК и выполнить какие-то действия. Где хоть искать пример.
Программирование Android Что я делаю не так. Совсем нубский вoпрос. Везде в руководствах говорится, что обработчик нажатия кнопки должен переопределять метод onClick. У меня данный код не компилируется. Если убрать @Override - то все в порядке. Кто прав? public... http://www.cyberforum.ru/android-dev/thread543458.html
Программирование Android растровый (2д) редактор http://www.cyberforum.ru/android-dev/thread543307.html
Здравствуйте. Задача сделать растровый (2д) редактор. Начать думаю с того, чтобы пользователь мог загружать в него свои изображения, редактировать их а потом использовать в других «частях» программы....
Программирование Android Добавочный номер при звонке У меня вопрос как позвонить на номер и, после ответа, набрать добавочный номер, а после этого завершить звонок? Сам звонок просто: Intent dialIntent = new Intent(Intent.ACTION_CALL,... http://www.cyberforum.ru/android-dev/thread543159.html
aaleksander
111 / 85 / 21
Регистрация: 06.06.2011
Сообщений: 398
Записей в блоге: 1
Завершенные тесты: 1
0

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

11.04.2012, 11:43. Просмотров 4234. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 11:43
Готовые ответы и решения:

При смене ориентации на land программа "вылетает"
программа в Android Studio. Из приложения вырезал практически все. 5 часов экспериментировал так и...

Глючит кнопка Домой. Что делать?
У меня LG L Fino .Сегодня заметил что начала глючить кнопка home .Бывает вообще целая нижня часть с...

Кнопка "Стереть данные", как от нее защититься?
В настройках приложения есть кнопка &quot;Стереть данные&quot;, она удаляет все данные (в том числе и sql)...

Свой Launcher. Срабатывает кнопка "назад"
Здравствуйте! -Пишу свой простенький Laucher(во многом опирался на этот пример). -Тестирую на...

Кнопка "Показать на карте" и MapActivity
Всем привет, возник такой вопрос. У меня есть список магазинов в RecyclerView во фрагменте. ...

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