420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
||||||
1 | ||||||
Можно ли оформить AlertDialog в виде функции?22.05.2013, 05:22. Показов 3874. Ответов 33
Метки нет (Все метки)
Помогите новичку! С Делфи перехожу на Яву
Создал класс, внутри процедуру для диалога Да-Нет. Успешно вызывается, но...
Где ошибка??? Хотелось бы использовать через res = MyAsk("Уверены?", "Да","Нет") if (res == 1) ...
0
|
22.05.2013, 05:22 | |
Ответы с готовыми решениями:
33
Вычисления суммы ряда оформить в виде функций, используемые функции и процедуры оформить в виде модуля Нахождение min оформить в виде функции, а вычисление и введение ai, bi, ci-в виде процедур Оформить отсортированный массив в виде процедуры, а сумму отрицательных чисел - в виде функции Вычислить m значений функции f(x) на отрезке [a, b]. Вычисление величины f(x) оформить в виде функции |
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
22.05.2013, 18:53 | 21 |
именно из-за использования одного потока это все происходит, вы работаете в UI потоке и задержка выполнение метода это зависание интерфейса, поэтому и нужно тяжелые операции выносить в отдельные потоки.
а в дэлфи(точнее в фреймворке а не в самом языке) судя по вашим словам в архитектуре встроено отделение вызываемых процедур в отдельный от UI поток. почитайте главу про потоки, а то видимо у вас складывается ложное впечатление. Добавлено через 4 минуты а если хотите чтобы было как в делфи, создавайте потоки и юзайте wait(), notify() как я уже писал выше.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
22.05.2013, 19:36 [ТС] | 22 |
Пробовал - полное зависание. Причем Wait потребовал завернуть в TRY скобки. И все-равно "глобальная ошибка"
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
22.05.2013, 20:24 | 23 |
здесь дело не в языке, а в самой архитектуре андроида, весь UI в одном потоке, все методы которые вызываются UIем - в том же потоке, методы жизненного цикла активити - в этом же потоке.
Добавлено через 1 минуту я думал wait() и notify() это первое с чего начинают изучение потоков, а у вас на них зависание)
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
22.05.2013, 20:42 [ТС] | 24 |
Начал вычитывать потоки на яве... немного непривычные методы создания потоков. В делфях я редко использовал wait() и notify(). Обычно хватало "запустить" и "убить поток". Реже взаимные блокировки через защищенные области или мютексы/семафоры для доступам к общим данным или вывода в графику.
Не до конца понимаю использование потоков в ГРАФИКЕ(диалогах) андроида. Похоже я глушил первичный поток до вывода диалога (хоть и после команды SHOW). А следовательно обработчики кнопок никогда не сработают. Можно ли приостановить ТЕКУЩИЙ/ОСНОВНОЙ поток (UI) пока работает другой? Можно ли вызвать диалоговое окно (вопрос ДА-НЕТ) в отдельном потоке и обработчики нажатий на кнопки выполнить в нем-же? Как обрабатывается нажатие ВНЕ вопроса - диалог гаснет, а кнопки не нажаты? Не зависнет ли первый поток (забыли разблокировать)?
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
22.05.2013, 20:55 | 25 |
нет, основной(UI) поток никогда не нужно приостанавливать или даже нагружать длительными процессами.
как бы то понятнее объяснить, любые изменения юая можно делать только в UI потоке, но можно из другого потока вызвать выполнение определенного кода в UI потоке(Handler, View.post(), runOnUiThread(), AsyncTask) изначально все процедуры(в java правильно говорить методы) которые вызывает UI выполняются в UI потоке, вы можете из них запустить отдельный поток, но нельзя задерживать их выполнение(зависание UIя) должен быть отдельный калбек для этого, нужно в документацию глянуть. не понял этого вопроса.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
22.05.2013, 21:41 [ТС] | 26 |
Нельзя в момент работы OnButton1Click обработать нажатие ДА (бесконечный цикл тоже отпадает)... Действительно ява - самый "гибкий язык", на котором можно сделать все...
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
22.05.2013, 21:49 | 27 |
да, нельзя задерживать/останавливать UI поток, он отвечает за реакцию на действия пользователя и за обновление отображения на дисплеи. задержка UI потока это просто зависание интерфейса.
Добавлено через 1 минуту и еще раз повторяю, дело не в языке(поток он и в африке поток), а в архитектуре андроида, в делфи все точно также просто фреймворк берет на себя эту работу с потоками(создает потоки, вызывает wait/notify), а в андроиде такого нет.
1
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
23.05.2013, 04:52 [ТС] | 28 |
Пожалуй понял... Спасибо за ответы. Буду вычитывать теорию для деталей, но суть понял...
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
25.05.2013, 10:19 [ТС] | 29 |
У меня последний (пока чисто-теоретический) вопрос: Если бы я писал свои проекты на VC++, я бы смог создать такую функцию? Там (вроде) не используются колбеки так часто. Имеет ли переходить на Си? Все ли (из того что может на андроид под ява) можно написать на VC++?? Слышал что Си более продвинут и используется для использования "хакерских" возможностей (нижний уровень апи). А как он относится к обычным формам?
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
25.05.2013, 11:59 | 30 |
ну, во первых не VC++, а просто С/С++.
я не имею опыта написания под андроид на С/С++, но не думаю что там с потоками как-то по-другому.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
25.05.2013, 22:17 [ТС] | 31 |
Я имею в виду не потоки (подзреваю так-же), а необходимость плодить колбеки вместо функций. Что-бы диалоговое окно "ДА+НЕТ" ПОДВЕШИВАЛО основной поток пока не ответит пользователь.
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
25.05.2013, 22:36 | 32 |
здесь от языка не зависит, задерживаете UI поток - получаете зависание интерфейс.
0
|
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
|
|
26.05.2013, 01:55 [ТС] | 33 |
Мне просто не нравится (СИЛЬНО) технология колбеков от которых нельзя избавиться. И тот факт что вся графика (все окна одновременно) находятся в одном потоке. Нельзя как в Win "заморозить" одно окно пока не закроется другое не нарезая процедуру до показа окна и после на "колбеки/реакции". Нажал "покажи меню", дождись кнопки и "ветвИ" логику превращается в десяток независимых путанных процедур. Захотел показать ползунок в процессе работы - дождись окончания процедуры или выводи ее в параллельный поток с блокировкой всех кнопок. Захотел вывести "отладочный" лог на экран - только после окончания полной обработки или в поток. А если кнопок больше 10, а если они плодятся как кролики и проконтролировать их блокировку это работа на целую процедуру в несколько страниц кода с полным перебором кнопок. Раньше часто подобным пользовался в нескольких языках (делфи, 1С). И даже если перепишу свою реализацию окон(например 3 "оконных" прямоугольника с кнопками на картинке), то не особо представляю как это упростить. Офисным программам обычно такая сложность (колбеки) не нужна(даже вредит). Часто требуется быстро модифицировать одну большую ("базовую") процедуру обработки.
Сейчас пишу некое подобие "движка" для офисной логики - заполняемые формы на андроиде скидываемые на сервер. Синхронизациябаз с сервером для оффлайн работы (затягивание десятка таблиц) . И постоянно спотыкаюсь на колбеках. Привык разносить логику и графику по разным модулям(там красивые окошешки, стили скинов, кнопочки, панельки, а рядом глобальные обработчики повешеные на те кнопочки одной процедурой), а здесь они получаются сильно склееными и взаимопересекающимимся... Не разделить... В теории круто конечно если будет поддержка многопоточности на уровне ядра, сильно ускорит работу на многоядерных, но пока... сильно бесит и усложняет работу! Подскажите (или дайте ссылки на статьи), чем отличается кодинг под андроид на си++ от явы? Преимущества, недостатки... Не сложность языка или инструментария, а ограничения конструкций и доступы к API. Раньше знаю ява был базовым и на си можно было делать лишь пару функций, но теперь вроде (после NDK) функционал С++ сравнялся или даже превзошел. Так ли это?
0
|
1162 / 986 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
|
|
26.05.2013, 03:12 | 34 |
первые три абзаца не понял
а по поводу 4-го, думаю что единственно ради чего используется С++ в андроиде это быстродействие... Добавлено через 33 минуты http://developer.android.com/t... index.html
0
|
26.05.2013, 03:12 | |
26.05.2013, 03:12 | |
Помогаю со студенческими работами здесь
34
Оформить вычисления значения интегральной функции в виде процедуры-функции Оформить в виде функции Оформить в виде функции Оформить в виде функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |