Вверх ↑
Этот топик читают: Гость
Ответов: 194
Рейтинг: 2
#916: 2014-03-31 13:49:18 ЛС | профиль | цитата
Полезное для Android разработчика #2 (http://habrahabr.ru/post/217517/)
карма: 0

2
Голосовали:Netspirit, sаmakacd
Ответов: 1821
Рейтинг: 168
#917: 2014-03-31 15:15:36 ЛС | профиль | цитата
lisnic, по поводу Android Universal Image Loader. Это как раз разрабатывается сейчас, причём без всяких сторонних библиотек, а на стандартных классах Android.
Вот, что интересно, это Staggered GridView. Я-то думаю, как разработчики Google Keep сделали главный экран приложения. Вроде, Grid, но не Grid Crop тоже можно добавить, но в нём пока нет особой необходимости.
Flip не подходит. Он несовместим со старыми (<= 2.3) версиями Android. Вроде, есть стандартное решение
карма: 5

0
Ответов: 163
Рейтинг: 33
#918: 2014-04-01 08:05:19 ЛС | профиль | цитата
А у меня у одного проблемы с сообщением о бесконечной рекурсии в компоненте hiHub? Сообщение возникает редко, при этом никакой рекурсии нет. Установить причину не удается, так как при попытке вынести проблемный участок схемы в отдельный проект проблема уходит. Однажды сообщение перестало появляться просто после удаления проблемного участка схемы и последующей отмены этого действия. Но чаще всего приходиться долго плясать с бубном, вставляя в схему костыли. В основном проблема замечена когда с выхода onTimer компонента hiTimer связь подается через хаб на его же вход doStop. Повторюсь, это происходит не всегда, а очень редко. Такое впечатление, что кодогенератор "думает", что doStop должно привести к событию onTimer. Вчера проблему вызвал уже мой компонент (здесь не выложенный). Не стал больше мучаться, закомментировал в hiHub соответствующие строки, все и компилируется и работает нормально. Вообще по-моему за рекурсией должен следить программист, а не среда.
карма: 3

0
Гость
Ответов: 17029
Рейтинг: 0
#919: 2014-04-01 08:58:29 правка | ЛС | профиль | цитата


Редактировалось 9 раз(а), последний 2022-09-18 15:30:42
карма: 0

0
Ответов: 4628
Рейтинг: 747
#920: 2014-04-01 11:18:58 ЛС | профиль | цитата
GreM, в Hub добавлен такой контроль, ибо существует комбинация, при которой HiAsm уходит в безусловную рекурсию. На хабе это наиболее хорошо заметно, а именно:
- имеется хаб с несколькими входами и одним и более выходов
- подключить, например, кнопку к первому входу
- подключить любой из выходов хаба к любому другому входу
- скомпилировать, получим сообщение о недопустимости такого соединения. Теперь если в хабе убрать этот контроль, при компиляции HiAsm вырубится.

Более универсально определение проблемы: если у компонента есть несколько методов, которые вызывают одно и то же событие, то недопустимо из этого события вызывать любой из этих методов. Это справедливо даже если к событию подключено любое количество других компонентов, при условии, что в этих компонентах метод вызывает событие напрямую.
То-есть, такую защиту, как у хаба, придется ставить и в другие компоненты. Или зашить прямо в кодогенератор.

Ошибка не возникает (точнее, возникает редко), когда событие генерируется в методе Init() компонента (характерно для визуальных компонентов, и других, в которых "событие" возникает из системы, а не как реакция на вызов метода компонента).

Пример кода, приводящего к ошибке:


#hws
func doMethod1(_data)
...
event(MyEvent)
...
end
func doMethod2(_data)
...
event(MyEvent)
...
end
Возможная корректная реализация:


#hws
func Init()
fvar(old, tmp)

tmp = block.reggen()
old = block.select(tmp)

println('void ', my_test_method, '(){')
block.inclvl()
event(MyEvent)
block.declvl()
println('}')

MoveBlockTo(BLK_METHODS)
block.select(old)
end

func doMethod1(_data)
...
println(my_test_method, '();') // Здесь мы уже не вызываем событие кодогенератора, а заставляем в рантайм выполниться коду события, который был сгенерирован ранее
...
end
func doMethod2(_data)
...
println(my_test_method, '();')
...
end
Недостаток этого способа - сложно оптимально передать данные из потока "сквозь" компонент на событие, потому что у разных методов данные могут быть разных типов и код для их обработки требуется разный. Для решения этой проблемы мы используем класс Memory, который преобразовывает тип данных в runtime, что не очень оптимально с точки зрения производительности и контроля типов при кодогенерации. Хотя передавать неизменные данные со входа на выход требуется редко.

Ошибка может исчезать при перестановке компонентов. Я пока конкретно с этим не сталкивался, но ясно, что порядок инициализации компонентов влияет на порядок вызова методов-событий и может приводить к вполне работоспособным комбинациям.



карма: 26

1
Голосовали:GreM
Ответов: 163
Рейтинг: 33
#921: 2014-04-01 12:22:56 ЛС | профиль | цитата
Спасибо за разъяснения. И коль уж речь о хабах, хочется спросить про HubEx ("суммирующий", который "точка"). Планируется ли оборачивание в функцию части схемы, следующей за ним?
карма: 3

0
Ответов: 4628
Рейтинг: 747
#922: 2014-04-01 12:32:32 ЛС | профиль | цитата
Пока не задумывался об этом. Я не знаю, можно ли вообще добавить FTCG код для него.
По поводу создания функции, то это нужно и для обычного сделать. Только есть трудность с передачей данных из потока на событие.
карма: 26

0
Ответов: 6
Рейтинг: 0
#923: 2014-04-02 08:06:06 ЛС | профиль | цитата
Начал писать приложение, параллельно вспоминать программирование и не могу разобраться каким способом лучше всего на форме отобразить небольшую таблицу с числовыми данными в два столбца и 15 строк. Сами данные не изменяются. Подскажите, плз.
карма: 0

0
Ответов: 4628
Рейтинг: 747
#924: 2014-04-02 11:06:30 ЛС | профиль | цитата
Если количество строк фиксированное - можно использовать LayoutTable и вручную расставленные TextView. А так компонент "Таблица" пока не реализован.
карма: 26

0
Ответов: 6
Рейтинг: 0
#925: 2014-04-02 14:40:46 ЛС | профиль | цитата
Netspirit писал(а):
LayoutTable и вручную расставленные TextView
Спасибо, я так и сделал уже. Понадеялся, что есть более гуманные способы.

Хотел попробовать вариант через WebWiev и Memori, но свойство Default для Memori недоступно (выдаётся ошибка доступа). В чём может быть дело?
карма: 0

0
Ответов: 166
Рейтинг: 5
#926: 2014-04-06 23:42:37 ЛС | профиль | цитата
Не подскажете как сделать так чтобы при нажатии на кнопку происходило одно событие, а при отпускании другое. Чет никак не могу разобраться.
карма: 1
Мастер сам устанавливает закон
0
Ответов: 194
Рейтинг: 2
#927: 2014-04-07 03:35:23 ЛС | профиль | цитата
Надо создать отдельную тему: "HELP для Android"
карма: 0

0
Ответов: 163
Рейтинг: 33
#928: 2014-04-13 10:58:13 ЛС | профиль | цитата
А не перевести ли hiTimer на handler и отложенные сообщения? Например, [удалено]. Это должно быть менее ресурсоемко.
карма: 3

1
Голосовали:sаmakacd
Ответов: 1821
Рейтинг: 168
#929: 2014-04-13 11:11:09 ЛС | профиль | цитата
GreM, а не будет ли возникать задержка перед итерацией? У меня, когда я изучал Handler'ы и Messages, возникала задержка до 10 мс
карма: 5

0
Ответов: 163
Рейтинг: 33
#930: 2014-04-13 11:48:39 ЛС | профиль | цитата
Будет. Более того, она будет не предсказуема. Однако для точной выдержки таких малых интервалов надо использовать что-то специфическое. А Timer/TimerTask к такой задержке не приводит?
карма: 3

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)